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