c# - Google Adword 和 asp.net 母版页

标签 c# asp.net google-ads-api

我正在尝试将 Google Adword 转换代码脚本添加到我们网站的某些 aspx 页面,但我在使用母版页的网站上遇到了问题。谷歌指令说将代码放在 body 标签之前,但使用母版页时,代码将出现在使用母版页的所有页面上。我想在某些页面使用单独的转换代码而其他页面不使用任何内容的情况下进行设置。任何建议或例子将不胜感激。另外,我正在使用 C#。

贾马尔

最佳答案

有许多不同的方法可以从各个页面与母版页上的控件进行通信。其中之一是创建一些简单的自定义控件并使用 .NET 与其 ScriptManager/ScriptManagerProxy 控件一起使用的相同模式。基本上,您可以将 ScriptManager 控件放在具有默认设置的母版页上,然后如果您需要覆盖页面上的默认设置,则可以使用 ScriptManagerProxy 控件。

我真的不知道 Adwords 转换代码涉及的所有内容,但您可以创建如下所示的自定义控件:

AdwordConversionControl:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Text;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace SATest
{
    [DefaultProperty("ConversionCode")]
    [ToolboxData("<{0}:AdwordConversion runat=server></{0}:AdwordConversion>")]
    public class AdwordConversion : Control
    {
        private const string _conversionCodeKey = "cc";
        private const string _includeScriptKey  = "ic";

        [Category("Behavior")]
        [DefaultValue("")]
        public string ConversionCode
        {
            get { return (String)(ViewState[_conversionCodeKey] ?? "" ); }
            set { ViewState[_conversionCodeKey] = value; }
        }

        [Category("Behavior")]
        [DefaultValue(false)]
        public bool IncludeScript
        {
            get { return (bool)(ViewState[_includeScriptKey] ?? false ); }
            set { ViewState[_includeScriptKey] = value; }
        }


        protected override void Render(HtmlTextWriter writer)
        {
            if ( !IncludeScript ) { return; }

            string js = "<script type=\"text/javascript\">...Insert conversion code here: var code = " + ConversionCode + ";</script>";

            writer.Write( js );
        }

        protected override void OnInit(EventArgs e)
        {
            base.OnInit(e);

            if ( Page.Items.Contains( typeof(AdwordConversion) ) ) 
            {
                throw new ApplicationException( "There can be only one AdwordConversion control defined on a page.  Use AdwordConversionProxy." );
            }

            Page.Items[typeof(AdwordConversion)] = this;
        }
    }
}

AdwordConversionProxy 控件:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Text;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace SATest
{
    [DefaultProperty("ConversionCode")]
    [ToolboxData("<{0}:AdwordConversionProxy runat=server></{0}:AdwordConversionProxy>")]
    public class AdwordConversionProxy : Control
    {
        private string _conversionCode;
        private bool?  _includeScript;

        public string ConversionCode
        {
            get { return _conversionCode; }
            set { _conversionCode = value; }
        }

        public bool IncludeScript
        {
            get { return ( _includeScript.HasValue ) ? _includeScript.Value : false; }
            set { _includeScript = value; }
        }


        protected override void Render(HtmlTextWriter writer)
        {
        }

        protected override void OnPreRender(EventArgs e)
        {
            base.OnPreRender(e);

            AdwordConversion current = Page.Items[typeof(AdwordConversion)] as AdwordConversion;

            if ( current == null )
            {
                throw new ApplicationException( "AdwordConversionProxy requires that an AdwordConversion control already exist on a page." );
            }

            if ( _conversionCode != null )
            {
                current.ConversionCode = _conversionCode;
            }

            if ( _includeScript.HasValue )
            {
                current.IncludeScript = _includeScript.Value;
            }
        }
    }
}

然后您只需将 AdwordConversion 控件放置在具有默认值的母版页上,然后将 AdwordConversionProxy 控件放置在需要自己设置的各个页面上。

关于c# - Google Adword 和 asp.net 母版页,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5079380/

相关文章:

php - 在网站中使用 google adwords 和分析检测访问者 adwords 关键字?

c# - 从数据绘制具有正态分布叠加的直方图

c# - 如何从 OKTA 获得用于单元/集成测试的 SAML 响应

c# - 在 Visual Studio 中扩展 "Tools"窗口

c# - ASP.NET Webforms - 如何确定请求以问号结尾,即。?

perl - v2011109 沙盒上的 Adwords API 出现 500 错误

c# - 使用 AttributeRouting 和 MvcRouteTester 对 MVC 4 路由进行单元测试

c# - 新手从哪里开始在 asp.net c# 中记录错误?

asp.net - 动态添加客户端脚本到asp.net页面

google-tag-manager - 关于 Google AdWords 转化