【问题标题】:ASP.NET UpdatePanel and Javascript __dopostbackASP.NET UpdatePanel 和 Javascript __dopostback
【发布时间】:2011-09-15 17:49:36
【问题描述】:

我像这样从 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 做的其他事情一样)。我怀疑我的代码隐藏是从页面而不是面板中获取事件参数,但我真的不知道,有什么想法吗?

【问题讨论】:

  • 你试过 Request.Form("__EVENTTARGET") 吗?
  • 哇,伙计,我不得不说,在我在这个网站上发布的所有帖子中,这一篇获得了两颗珍珠。感谢两者!

标签: javascript asp.net events postback arguments


【解决方案1】:

如果您想在 _EVENTARGUMENT 中添加一些值,您应该在发送表单之前使用 javascript 执行此操作 _doPostBack('UpdatePanel1','') 因为 __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 的参数即可。
猜你喜欢
  • 2010-09-29
  • 2011-01-26
  • 2016-06-26
  • 2010-12-18
  • 1970-01-01
  • 1970-01-01
  • 2012-12-05
  • 2010-12-29
  • 2011-01-31
相关资源
最近更新 更多