Добавить элемент управления в заголовок страницы в ASP.NET - PullRequest
6 голосов
/ 21 мая 2009

Я создаю собственный элемент управления сценарием в ASP.NET

Цель элемента управления - просто серверный вариант тега, используемого для загрузки файлов JavaScript. Однако основная цель этого элемента управления - объединить несколько сценариев в один ответ, чтобы на стороне клиента они увидели что-то вроде тег для каждого местоположения, поэтому все сценарии, зарегистрированные в расположении DocumentTop, будут объединены в один тег, за исключением местоположения «inline», все встроенные сценарии отображаются отдельно, если они существуют в разметке. Я также создал httphandler, js.ashx, который выполняет фактическое объединение скриптов

Все работает нормально, за исключением местоположения «Голова», для двух местоположений документа я просто использую ClientScriptManager во время предварительного рендеринга, но для местоположения Голова я пробовал следующий код во время предварительного рендеринга

var scriptControl = new HtmlGenericControl("script");
scriptControl.Attributes["language"] = "javascript";
scriptControl.Attributes["type"] = "text/javascript";
scriptControl.Attributes["src"] = src;
Page.Header.Controls.Add(scriptControl);

и я получаю следующую ошибку: Невозможно изменить коллекцию элементов управления на этапах DataBind, Init, Load, PreRender или Unload.

Кто-нибудь знает, как добавить элемент управления в заголовок страницы из пользовательского элемента управления?

Между прочим, элемент управления используется на странице содержимого, которая имеет два вложенных мастера, а также имеет зарегистрированный ScriptManager на корневом мастере. Проект asp.net 3.5 проект веб-приложения

Ответы [ 4 ]

9 голосов
/ 21 мая 2009

Я нашел ответ на мой вопрос.

Я не совсем понимаю, почему, но проблема заключается в том, когда я пытаюсь добавить свой элемент управления сценарием в голову, выполнение этого в событии PreRender элемента управления вызывает мою ошибку, но если вы добавляете элемент управления во время события PreRender страницы все работает отлично и денди например:

protected override void OnInit(EventArgs e)
{
    base.OnInit(e);
    this.Page.PreRender += new EventHandler(Page_PreRender);
}

void Page_PreRender(object sender, EventArgs e)
{
    var scriptControl = new HtmlGenericControl("script");
    Page.Header.Controls.Add(scriptControl);
    scriptControl.Attributes["language"] = "javascript";
    scriptControl.Attributes["type"] = "text/javascript";
    scriptControl.Attributes["src"] = "blah.js";
}
3 голосов
/ 21 мая 2009

Я не знаю, почему вы получаете эту ошибку, но как насчет использования ClientScript , например:

protected void Page_Load(object sender, EventArgs e)
{
    string scriptFile = "myscriptFile.js";

    if (!this.Page.ClientScript.IsClientScriptIncludeRegistered("myScript"))
    {
        this.Page.ClientScript.RegisterClientScriptInclude("myScript", scriptFile);
    }
}

ClientScriptManager.RegisterClientScriptInclude Метод

1 голос
/ 21 октября 2012
protected override void OnInit(EventArgs e)
{
    EnsureChildControls();
    base.OnInit(e);
}
0 голосов
/ 04 ноября 2010
  protected void Page_Load(object sender, EventArgs e)
    {        
        HtmlGenericControl js = new HtmlGenericControl("script");
        js.Attributes["type"] = "text/javascript";
        js.Attributes["src"] = yol.ScriptYol("jquery-1.3.2.min.js");
        this.Page.Header.Controls.Add(js);

    }
...