2009-05-27 3 views
1

Ich habe eine Gridview-Schaltfläche, die ich programmgesteuert erstellt habe und ich möchte ein Update-Panel auf der Clientseite mit den gesendeten Daten laden. Ich habe ein verstecktes Wertfeld, das seine Daten auf den Klick der Gridview-Schaltfläche erhält und die Dropdown-Liste in meinem Updatepanel hängt von diesem Wert ab.Wie kann ich ein Update-Panel onclient-Seite mit Javascript neu laden?

Antwort

1

beim Aufruf __doPostBack direkt arbeiten, es ist keine perfekte Lösung, weil der Name Diese Funktion ist streng genommen ein Implementierungsdetail des .NET-Frameworks.

Eine bessere Lösung ist die Verwendung ClientScriptManager.GetPostBackEventReference, die Ihnen eine widerstandsfähigere Schnittstelle zur gleichen Funktionalität bietet. Beachten Sie, dass GetPostBackEventReference und GetCallBackEventReference nicht identisch sind - das erstere verursacht einen Seitenneuladevorgang (teilweise oder vollständig, abhängig davon, wie Ihre UpdatePanels eingerichtet sind), während letzteres nicht funktioniert.

+0

Ich bin mir nicht sicher, wie ich das verstehe. das war mein Versuch: btnedit.OnClientClick = ClientScript.GetCallbackEventReference (UpdatePanel1, "", "", "") & String.Format ("openModal ('{0}', '" & GridView1.Rows (i) .Cells (0) .Text & "'); return false; ", hidden.ClientID) Ich bin nicht sicher, was ich als Parameter eingeben soll. – Eric

+0

Ich habe meine Antwort bearbeitet, um darauf hinzuweisen, dass Sie wahrscheinlich ein Postback und keinen Rückruf wünschen –

+0

Ich bin etwas verwirrt über das, was Sie versuchen zu tun - tut der Benutzer etwas mit dem Ergebnis von openModal(), und es ist, nachdem sie getan haben, dass die Listbox neu binden soll? –

0

verwenden wir die __doPostBack() -Methode, die eine Postbacks simuliert und bewirkt, dass die Update

__doPostBack('controlName',''); 

aufzufrischen Vergessen Sie nicht, dass die Steuer Name ist es HTML-ID ist (was gut Dollar usw. enthalten können) und nicht nur es ist ASP.NET ID.

Soweit ich weiß, Sie entweder diese Methode aufrufen kann und in dem verborgenen Wertfeld passieren, oder div, dass es in ist.

+0

ich habe versucht, es wie dieses __doPostBack zu nennen ('<% = Upd atePanel1.ClientID%> ',' '); Wie kann man die Methode aufrufen? – Eric

+0

-1: Aufruf von __doPostBack direkt ist eine schlechte Übung. –

+0

Ich weiß, nicht jeder mag _doPostBack, aber bitte erklären Sie, warum es eine schlechte Übung ist. Es ist gut akzeptiert und weit verbreitet und all die Nachteile, die damit verbunden sind, wie das Potential für _doPostBack, sind veraltet, sind unbegründet. – tjmoore

1

Der einfachste Weg, dies zu tun, ist __doPostBack von Client-Seite aufrufen.

Auf Seite Button1_onclick Methode Client ruft:

__doPostBack('<%=UpdatePanel1.ClientID %>','Refresh:0,1,2'); //refresh update panel 

Auf Seite hinter den folgenden Ereignishandler hinzufügen, den Post zurück Anruf zu erfassen:

protected void UpdatePanel1_Load(object sender, EventArgs e) 
{ 
    string arg = Request.Form["__EVENTARGUMENT"]; 

    if (string.IsNullOrEmpty(arg)) return; 

    if (arg.StartWith("Refresh") 
    { 
     //parse data first then do your thing here... 
    } 
} 

Und natürlich nicht vergessen Draht Ereignis auf das obige Verfahren:

protected void Page_Init(object sender, EventArgs e) 
{   
    UpdatePanel1.Load += new EventHandler(UpdatePanel1_Load); 
} 
Verwandte Themen