2011-06-15 6 views
6

J'appelle une publication partielle de javascript comme ceci:ASP.NET UpdatePanel et Javascript __doPostBack

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

Il fait 1/2 de ce que je dois à. Il appelle une publication partielle, juste pour mon UpdatePanel.

Maintenant, la partie délicate. J'essaie (en quelque sorte) de référencer le second argument de __dopostback dans mon code. Ce ne fonctionne pas:

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

    Dim MyArg As String = Request("__EVENTARGUMENT") 

End Sub 

Je viens d'obtenir une chaîne vide.

Bien sûr, ce que j'essaie de faire pourrait être complètement faux (comme avec tout ce que j'essaie de faire avec ASP). Je soupçonne que mon codebehind saisit l'argument d'événement de la page au lieu du panneau, mais je ne sais vraiment pas, des idées?

+1

Avez-vous essayé Request.Form ("__ eventtarget")? –

+0

Wow man, je dois dire que de tous les messages que j'ai mis en place dans ce site, celui-ci a atterri deux perles. Merci aux deux !! –

Répondre

11

Si vous voulez mettre une valeur à l'intérieur _ eventArgument vous devriez le faire avec javascript avant de l'envoyer sous forme par _doPostBack (« UpdatePanel1 », « ») parce que __EVENTTARGET est le champ caché et dans votre document html il ressemble à ceci:

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

Je vous recommande de faire quelque chose comme ceci:

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 ous utiliser jQuery il serait plus court:

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

Si cela ne fonctionne pas, je voudrais vous suggérer de mettre un champ caché dans le panneau Mise à jour:

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

Et puis faire le même travail comme ci-dessus:

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

dans premier scénario, vous êtes en mesure d'obtenir __EVENTARGUMENT à côté serveur:

String args = Request["__EVENTARGUMENT"]; 

Si le premier scénario ne fonctionne pas, vous pouvez utiliser quelque chose comme ça:

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

Ceci est incorrect. '__doPostBack' écrase' __EVENTTARGET' et '__EVENTARGUMENT' avec ses premier et deuxième arguments, il est donc inutile (et trompeur) de les définir avant de l'appeler. Ici non plus, il n'y a pas besoin de champ caché. Utilisez simplement les paramètres de '__doPostBack'. –

Questions connexes