2009-05-20 16 views
5

tworzę własny kontrolę skryptu w ASP.NETDodaj kontrolę do nagłówka strony w ASP.NET

Celem kontroli jest po prostu wariant serwer znacznika, używany do ładowania plików JavaScript Głównym celem tej kontroli jest jednak łączenie wielu skryptów w jedną odpowiedź, więc po stronie klienta widzą coś takiego jak tag dla każdej lokalizacji, więc wszystkie skrypty zarejestrowane w lokalizacji DocumentTop zostaną połączone w jeden tag, z wyjątkiem lokalizacja "inline", wszystkie wbudowane skrypty są renderowane indywidualnie tam, gdzie istnieją w znaczniku Mam również utworzony httphandler, js.ashx, który faktycznie łączy ze sobą skrypty

Wszystko działa dobrze z wyjątkiem „głowa” lokalizacji, dla dwóch miejscach dokumentu po prostu użyć ClientScriptManager podczas prerender ale dla lokalizacji Centrali Próbowałem następujący kod podczas renderowania pre

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

i ja uzyskać następujący błąd: Kolekcja kontrolna nie może być modyfikowana podczas faz DataBind, Init, Load, PreRender lub Unload.

Czy ktoś wie, jak dodać kontrolę do nagłówka strony z niestandardowego formantu?

Nawiasem mówiąc, formant jest używany na stronie treści, która ma dwa zagnieżdżone wzorce i ma również ScriptManager zarejestrowany w głównym katalogu głównym. Projekt jest projekt aplikacji asp.net 3.5 web

Odpowiedz

8

Ive odkrył odpowiedź na moje pytanie.

Nie do końca rozumiem dlaczego, ale problem polega na tym, że próbuję dodać kontrolę skryptu do głowy, wykonanie tego w zdarzeniu PreRender kontrolki powoduje mój błąd, ale jeśli dodasz kontrolę podczas PreRender strony zdarzenie to wszystko działa cacy np

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

Nie wiem, dlaczego ten błąd, ale jak o użyciu ClientScript tak:

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 Method

+0

Hi Canavar ja z powodzeniem przy użyciu Page.ClientScript zarejestrować skryptów w treści dokumentu, problem próbuje zarejestrować tag skryptu w tagu , do moja wiedza, this.Page.ClientScript.RegisterClientScriptInclude rejestruje js zaraz po tagu

w ciele – Lightweight

0
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); 

    } 
1
protected override void OnInit(EventArgs e) 
{ 
    EnsureChildControls(); 
    base.OnInit(e); 
} 
+5

Witamy w stackoverflow! Zawsze lepiej jest podać krótki opis przykładowego kodu, aby poprawić dokładność wpisów :) –

Powiązane problemy