2011-06-15 21 views
6

Voy a llamar a una devolución de datos parcial de JavaScript, así:ASP.NET UpdatePanel y Javascript __doPostBack

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

Lo hace 1/2 de lo que necesito que lo haga. Es hace llamar a una devolución de datos parcial, solo para mi UpdatePanel.

Ahora la parte más complicada. Estoy intentando (de alguna manera) hacer referencia al segundo argumento de __dopostback en mi código. Este no funciona:

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

    Dim MyArg As String = Request("__EVENTARGUMENT") 

End Sub 

apenas consigo una cadena vacía.

Por supuesto, lo que estoy tratando de hacer puede ser completamente incorrecto (como con todo lo demás que trato de hacer con ASP). Sospecho que mi código subyacente está tomando el argumento del evento de la página en lugar del panel, pero realmente no sé, ¿Alguna idea?

+1

Ha intentado Request.Form ("__ EventTarget")? –

+0

Guau, tengo que decir que de todas las publicaciones que he puesto en este sitio, ESTO consiguió dos perlas. Gracias a ambos !! –

Respuesta

11

Si usted quiere poner algún valor dentro _ EVENTARGUMENT usted debe hacer esto con javascript antes de enviar formulario por _doPostBack ('UpdatePanel1', '') porque __EVENTTARGET es campo oculto y en el documento html que se ve así:

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

te recomiendo que hacer algo como esto:

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

Si y ou utilizar jQuery sería más corto:

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

Si no funciona me gustaría sugerir que poner un campo oculto en el interior del panel de actualización:

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

Y luego hacer el mismo trabajo como arriba:

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

en primer escenario que es capaz de conseguir __EVENTARGUMENT en el lado del servidor:

String args = Request["__EVENTARGUMENT"]; 

Si el primer escenario no funciona se puede usar algo así:

String args = hdnData.Value;//This works even in Page_Load function. 
+0

Esto es incorrecto. '__doPostBack' sobrescribe' __EVENTTARGET' y '__EVENTARGUMENT' con sus argumentos primero y segundo, por lo que no tiene sentido (y es engañoso) configurarlos antes de llamarlos. No hay necesidad de un campo oculto aquí, tampoco. Solo usa los parámetros '__doPostBack'. –

Cuestiones relacionadas