Главные страницы Google Adword и asp.net

Я пытаюсь добавить скрипт кода преобразования Google Adword на определенные страницы aspx на нашем веб-сайте, но у меня возникает проблема с сайтом, использующим мастер-страницы. В инструкции Google говорится о размещении кода перед тегом body, но при использовании мастер-страниц код будет на всех страницах, использующих эталонную страницу. Я хотел бы настроить его таким образом, чтобы на некоторых страницах использовались индивидуальные коды преобразования, а на других ничего не использовалось. Любые предложения или примеры будут оценены. Кроме того, я использую С#.

Джамал


person Jamal    schedule 22.02.2011    source источник
comment
на самом деле, я не понимал, что должен что-то делать. Я исправлю это. Прошу прощения за невнимательность.   -  person Jamal    schedule 22.02.2011
comment
FYI .... Я исправил свою ошибку. Я думаю, что это одно из лучших мест для ответов. Обновление может занять некоторое время.   -  person Jamal    schedule 22.02.2011


Ответы (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 Control:

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 поместите на отдельные страницы, которым нужны свои собственные настройки.

person blech    schedule 22.02.2011
comment
Я попробую и дам вам знать. В Интернете я нашел следующее: tehremo.blogspot.com/2008_01_01_archive.html. Если бы вы могли посмотреть на него и сказать мне, что вы думаете. - person Jamal; 23.02.2011
comment
Такой способ тоже сработает... Вам придется добавить дополнительную переменную, если вы хотите использовать разные коды конверсии на разных страницах. Основное различие между этим и вышеизложенным заключается в том, что вам потребуется установить переменные в коде программной части, тогда как приведенное выше решение позволяет вам установить его в файле aspx. Кроме того, другое решение нельзя повторно использовать на нескольких мастер-страницах. Что может не иметь значения, если у вас есть только один. Удачи! - person blech; 23.02.2011