2

ウェブサイトの特定の aspx ページに Google Adword 変換コード スクリプトを追加しようとしていますが、マスター ページを使用しているサイトで問題が発生しています。body タグの前にコードを配置するように言われた Google の指示ですが、マスター ページが使用されている場合、マスター ページを使用するすべてのページにコードが配置されます。特定のページで個別の変換コードを使用し、他のページでは何も使用しないように設定したいと考えています。提案や例をいただければ幸いです。また、C# を使用しています。

ジャマール

4

1 に答える 1

1

個々のページからマスター ページのコントロールと通信するには、さまざまな方法があります。その 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 コントロールを配置します。

于 2011-02-22T20:27:57.667 に答える