首页 文章

Google Adword和asp.net母版页

提问于
浏览
2

我正在尝试将Google Adword转换代码脚本添加到我们网站中的某些aspx页面,但我遇到了使用母版页的网站问题 . Google指令表示将代码放在body标签之前,但使用母版页时,代码将使用母版页在所有页面上 . 我想设置它,某些页面使用单独的转换代码而其他人不使用任何东西 . 任何建议或例子将不胜感激 . 另外,我正在使用C# .

贾马尔

1 回答

  • 1

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

相关问题