ASP.NET UpdatePanel e Javascript __dopostback

Sto chiamando un parziale di postback da javascript in questo modo:

function GetPolicyClick()
   {"__dopostback('UpdatePanel1', 'PostCall')";}

Fa 1/2 di quello che ho bisogno di. Si non chiamare un postback parziale, solo per la mia UpdatePanel.

Ora la parte difficile. Sto cercando (in qualche modo) per fare riferimento al secondo argomento di __dopostback nel mio codice dietro. Questo non funziona:

Private Sub UpdatePanel1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles UpdatePanel1.Load

    Dim MyArg As String = Request("__EVENTARGUMENT")

End Sub

Ottengo una stringa vuota.

Naturalmente, quello che sto cercando di fare potrebbe essere completamente sbagliato (come per tutto il resto cerco di fare con ASP). Sto sospettando che il mio codebehind è afferrando l’argomento dell’evento dalla pagina invece del pannello, ma io davvero non so, Qualche idea?

Hai provato a Richiesta.Form(“__EVENTTARGET”)?
Wow man, devo dire che di tutti i post ho messo in questo sito, QUESTO è atterrato due perle. Grazie ad entrambi!!

OriginaleL’autore | 2011-06-15

One Reply
  1. 11

    Se si vuole mettere un po ‘ di valore all’interno _EVENTARGUMENT lo si dovrebbe fare con javascript prima di inviare il modulo da _doPostBack(‘UpdatePanel1’,”) perché __EVENTTARGET è nascosto campo e in un documento html assomiglia a questo:

    <input type="hidden" value="" id="__EVENTARGUMENT" name="__EVENTARGUMENT">

    Vi consiglio di fare qualcosa di simile a questo:

    function setArgAndPostBack() {
        var arg = document.getElementById('__EVENTARGUMENT');
        var arg = document.getElementById("__EVENTARGUMENT");
        arg.value = 'something you want to put to server';
        __doPostBack('UpdatePanel1', '');
    }

    Se si utilizza jQuery sarebbe più brevi:

    function setArgAndPostBack() {
        $("#__EVENTARGUMENT").val('something you want to put to server');
        __doPostBack('UpdatePanel1', '');
    }

    Se non funziona, vorrei suggerire di mettere un campo nascosto all’interno del pannello di Aggiornamento:

    <asp:UpdatePanel runat="server" ID="UpdatePanel1">
        <ContentTemplate>
            <asp:HiddenField ID="hdnData" value="" runat="server" />
            <!-- your content goes here -->
        </ContentTemplate>
    </asp:UpdatePanel>

    E poi fare lo stesso lavoro, come sopra:

    function setArgAndPostBack() {
        //Here hidden field is filled with your data
        $("#<%=hdnData.ClientID%>").val('something you want to put to server');
        __doPostBack('UpdatePanel1', '');
    }

    Nel primo scenario si è in grado di ottenere __EVENTARGUMENT lato server:

    String args = Request["__EVENTARGUMENT"];

    Se il primo scenario non funziona, è possibile utilizzare qualcosa di simile:

    String args = hdnData.Value;//This works even in Page_Load function.
    Questo non è corretto. __doPostBack sovrascrive __EVENTTARGET e __EVENTARGUMENT con la prima e la seconda argomenti, quindi è inutile (e fuorviante) per impostare loro prima di chiamarlo. Non c’è bisogno di un campo nascosto qui. Basta usare __doPostBack‘s parametri.

    OriginaleL’autore r.piesnikowski

Lascia un commento