ASP.NET UpdatePanel 和 Javascript __dopostback

7

我正在使用JavaScript调用部分页面回发,代码如下:

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

它只完成了我需要的一半功能。它确实调用了部分后台,仅适用于我的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中尝试做的所有其他事情一样)。我怀疑我的代码后台从页面而不是面板中获取事件参数,但我真的不知道,有什么想法吗?


1
你尝试过使用Request.Form("__EVENTTARGET")吗? - amit_g
哇,我不得不说,在这个网站上我发布的所有帖子中,这篇文章是最受欢迎的。感谢两位!! - user724198
1个回答

12

如果你想要在 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', '');
}

如果不起作用,我建议您在更新面板中放置一个隐藏字段:

<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.

这是不正确的。__doPostBack会使用其第一个和第二个参数覆盖__EVENTTARGET__EVENTARGUMENT,因此在调用它之前设置它们是毫无意义的(并且具有误导性)。这里也不需要隐藏字段。只需使用__doPostBack的参数即可。 - Eric Eskildsen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接