Google Adword 和 asp.net 母版页

Posted

技术标签:

【中文标题】Google Adword 和 asp.net 母版页【英文标题】:Google Adword and asp.net master pages 【发布时间】:2011-02-22 14:28:09 【问题描述】:

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

贾马尔

【问题讨论】:

实际上,我没有意识到我必须做点什么。我会纠正的。我很抱歉没有注意。 仅供参考....我已经纠正了我的错误。我确实认为这是最好的答案之一。更新可能需要一段时间。 【参考方案1】:

有许多不同的方式可以从各个页面与母版页上的控件进行通信。其中之一是创建一些简单的自定义控件并使用 .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 控件放在需要自己设置的各个页面上。

【讨论】:

我会试一试,让你知道。我在网上找到的是这样的:tehremo.blogspot.com/2008_01_01_archive.html。如果你能看看它并告诉我你的想法。 这种方式也可以...如果您想在不同的页面上使用不同的转换代码,则必须添加一个额外的变量。与上面的主要区别在于它需要您在代码隐藏中设置变量,而上面的解决方案允许您在 aspx.xml 中设置它。此外,其他解决方案不能在多个母版页中重复使用。如果您只有一个,这可能无关紧要。祝你好运!

以上是关于Google Adword 和 asp.net 母版页的主要内容,如果未能解决你的问题,请参考以下文章

在 .NET 3.5 ASP.NET MVC 应用程序中使用 Google Maps API

Google 应用脚本中的 Adword 脚本

ASP.NET内容页中访问母版页中的对象

如何在带有母版页的 ASP.NET 中使用 JCrop

asp.net 从内容页面更改母版页部分 css

asp.net 从内容页面更改母版页部分 css