2009-07-27 11 views
43

Mam funkcję pageLoad, która ustawia niektóre css na formantu .ascx, którego nie mogę zmienić. Podczas ładowania strony wszystko jest w porządku, ale kiedy panel aktualizacji aktualizuje kontrolę, moje css nie jest już stosowane. Jak mogę ponownie uruchomić moją funkcję po aktualizacji strony?Jak mogę uruchomić javascript po odświeżeniu panelu aktualizacji?

$(function() { 
     $("textarea").attr("cols", "30"); 
     $("input.tbMarker").css({ "width": "100px" }).attr("cols","25"); 
    }); 

To oczywiście działa tylko przy początkowym ładowaniu strony. Jak mogę go uruchomić po aktualizacji?

+0

Tie w przypadku MSAjax pageload po stronie klienta: http://stackoverflow.com/questions/9026496/running-script-after-update-panel-ajax-asp -net – dotnettex

+0

http://stackoverflow.com/a/339114/900284 –

Odpowiedz

38

Dodawanie obsługi add_pageLoaded może również działać.

Sys.WebForms.PageRequestManager.getInstance().add_pageLoaded(PageLoadedHandler); 

Uwaga: funkcja obsługi zadziała dla każdego wywołania zwrotnego, ale można użyć sender._postBackSettings.panelID filtrować gdy chcesz, aby funkcja nazywa.

więcej próbek:

+0

To jest świetne! Ponadto, jeśli nie ma żadnego jawnego Panelu (np. Może używasz jakiejś Kontroli Telerik, która używa UpdatePanels za kulisami), możesz również użyć 'sender._postBackSettings.asyncTarget' aby sprawdzić, czy bieżący odświeżenie jest tym, którego szukasz dla. –

13

Podczas odświeżenie strony na panelu aktualizacji, w kodzie serwera, użyj ClientScriptManager aby dodać nowy skrypt na stronie coś takiego:

ClientScriptManager.RegisterStartupScript(
     typeof(page1), 
     "CssFix", 
     "javascriptFunctionName()", 
     true); 

enkapsulacja JavaScript w nazwie funkcji, która odpowiada trzecią tam argument, i powinien on zostać wykonany, gdy zwróci wartość odświeżenia.

11

Można także powiązać ze zdarzeniem w kodu po stronie klienta (JavaScript) Za każdym razem UpdatePanel zakończył tak:

 Sys.WebForms.PageRequestManager.getInstance().add_endRequest(function(){myFunction();}); 

Tak więc w tym przypadku myFunction(); będzie wywoływane za każdym razem, gdy wystąpił odświeżenie UpdatePanel. Jeśli wykonasz ten kod po załadowaniu strony, funkcja zostanie wywołana we właściwym czasie.

12

Dodaj kod w tym samym formularzu, w którym umieściłeś swojego Menedżera skryptów.

Code Behind:

protected void Page_Load(object sender, EventArgs e) 
{ 
    if (ScriptManager1.IsInAsyncPostBack) 
    { 
     StringBuilder sb = new StringBuilder(); 
     sb.Append("<script language='javascript' type='text/javascript'>"); 
     sb.Append("Sys.Application.add_load(func);"); 
     sb.Append("function func() {"); 
     sb.Append("Sys.Application.remove_load(func);"); 
     sb.Append("alert('I am Batman!');"); 
     sb.Append("}"); 
     sb.Append("</script>"); 
     ScriptManager.RegisterStartupScript(this, GetType(), "script", sb.ToString(), false); 
    } 
} 
69

najprostszych sposobów jest użycie MSAjax pageload wydarzenie w kodzie JavaScript:

<script> 
    ///<summary> 
    /// This will fire on initial page load, 
    /// and all subsequent partial page updates made 
    /// by any update panel on the page 
    ///</summary> 
    function pageLoad(){ alert('page loaded!') } 
</script> 

Używałem go wiele razy, to działa jak czar. Najważniejsze jest to, aby nie mylić go z funkcją document.ready (która zostanie wykonana tylko raz po tym, jak strona Document Object Model (DOM) jest gotowa do wykonania kodu JavaScript), jednak zdarzenia pageLoad będą wykonywane za każdym razem, gdy panel aktualizacji odświeża.

Źródło: Running script after Update panel AJAX asp.net

+3

niesamowite! od dawna szukałem sposobu na utrzymanie javascript podczas aktualizacji panelu aktualizacji, dziękuję za odpowiedź! – Shide

+1

Po prostu pracowałem nad tą sytuacją nad projektem - to było dla mnie najprostsze i najbardziej niezawodne. Metody 'add_pageLoaded' i' RegisterStartupScript' były trudniejsze do śledzenia i debugowania poprzez wywołania zwrotne, ale 'pageLoad' Just Works (tm) – brichins

+0

var firstload = 0; function pageLoad() {if (firstload == 0) firstload = 1; else {alert ("Odbiór zwrotny!"); } – mjb

Powiązane problemy