我正在调用
javascript的部分回发,如下所示:
function GetPolicyClick() {"__dopostback('UpdatePanel1','PostCall')";}
它是我需要它的1/2.它确实调用了部分回发,仅用于我的UpdatePanel.
现在是棘手的部分.我正在尝试(不知何故)在我的代码中引用__dopostback的第二个参数.这不起作用:
Private Sub UpdatePanel1_Load(ByVal sender As Object,ByVal e As System.EventArgs) Handles UpdatePanel1.Load Dim MyArg As String = Request("__EVENTARGUMENT") End Sub
我只是得到一个空字符串.
当然,我正在尝试做的可能是完全错误的(就像我尝试用ASP做的其他事情一样).我怀疑我的代码隐藏是从页面而不是面板中抓取事件参数,但我真的不知道,有什么想法吗?
解决方法
如果你想在_EVENTARGUMENT中加入一些值,你应该在使用_doPostBack(‘UpdatePanel1’,”)发送表单之前用javascript执行此操作,因为__EVENTTARGET是隐藏字段,在你的html文档中它看起来像这样:
<input type="hidden" value="" id="__EVENTARGUMENT" name="__EVENTARGUMENT">
我建议你做这样的事情:
function setArgAndPostBack() { var arg = document.getElementById('__EVENTARGUMENT'); var arg = document.getElementById("__EVENTARGUMENT"); arg.value = 'something you want to put to server'; __doPostBack('UpdatePanel1',''); }
如果你使用jQuery它会更短:
function setArgAndPostBack() { $("#__EVENTARGUMENT").val('something you want to put to server'); __doPostBack('UpdatePanel1',''); }
如果它不起作用,我建议你在Update面板中放入一个隐藏字段:
<asp:UpdatePanel runat="server" ID="UpdatePanel1"> <ContentTemplate> <asp:HiddenField ID="hdnData" value="" runat="server" /> <!-- your content goes here --> </ContentTemplate> </asp:UpdatePanel>
然后像上面那样做同样的工作:
function setArgAndPostBack() { //Here hidden field is filled with your data $("#<%=hdnData.ClientID%>").val('something you want to put to server'); __doPostBack('UpdatePanel1',''); }
在第一个场景中,您可以在服务器端获得__EVENTARGUMENT:
String args = Request["__EVENTARGUMENT"];
如果第一种情况不起作用,您可以使用类似的东西:
String args = hdnData.Value;//This works even in Page_Load function.