如何使用__doPostBack()

Mic*_*ute 154 javascript c# asp.net postback

我正在尝试使用ASP.NET创建一个异步回发__doPostBack(),但我不知道如何做到这一点.我想使用vanilla JavaScript.

像按钮单击这样简单的东西会导致__doPostBack()事件触发.我只是想了解这种机制是如何运作的.

Mr.*_*Mr. 148

您可以使用名为btnSave的按钮在Web表单中尝试此操作,例如:

<input type="button" id="btnSave" onclick="javascript:SaveWithParameter('Hello Michael')" value="click me"/>

<script type="text/javascript">
function SaveWithParameter(parameter)
{
  __doPostBack('btnSave', parameter)
}
</script>
Run Code Online (Sandbox Code Playgroud)

在你的代码后面添加这样的东西来读取值并对其进行操作:

public void Page_Load(object sender, EventArgs e)
{
  string parameter = Request["__EVENTARGUMENT"]; // parameter
  // Request["__EVENTTARGET"]; // btnSave
}
Run Code Online (Sandbox Code Playgroud)

尝试一下,让我们知道这是否适合您.

  • 只是一个简单的问题,__EVENTARGUMENT 将是参数还是 btnSave? (2认同)
  • 它是参数。__EVENTTARGET将为您提供按钮。 (2认同)

use*_*317 24

这也是让服务器端控件在FancyBox和/或jQuery Dialog中回发的好方法.例如,在FancyBox-div中:

   <asp:Button OnClientClick="testMe('param1');" ClientIDMode="Static"  ID="MyButton"  runat="server" Text="Ok" >
</asp:Button>
Run Code Online (Sandbox Code Playgroud)

JavaScript的:

function testMe(params) {
    var btnID= '<%=MyButton.ClientID %>';          
    __doPostBack(btnID, params);
}
Run Code Online (Sandbox Code Playgroud)

服务器端Page_Load:

 string parameter = Request["__EVENTARGUMENT"];
 if (parameter == "param1")
     MyButton_Click(sender, e);
Run Code Online (Sandbox Code Playgroud)

  • 应该使用UniqueID,而不是ClientID. (3认同)

kbr*_*ton 13

这是一个关于如何工作的简短教程__doPostBack().

说实话,我不太用它; 至少直接.许多服务器控件(例如,Button,LinkButton,ImageButton,的部分GridView等)使用__doPostBack他们的回传机制.

  • 快进了6年......而ASP.NET Web Forms仍然可以做到这一点.因此,接受的答案压倒性地取得了胜利. (9认同)

Pol*_*ton 8

我想在这篇文章中添加一些内容asp:button.我尝试过clientId,它似乎对我不起作用:

__doPostBack('<%= btn.ClientID%>', '');
Run Code Online (Sandbox Code Playgroud)

但是,获取UniqueId似乎会回发到服务器,如下所示:

__doPostBack('<%= btn.UniqueID%>', '');
Run Code Online (Sandbox Code Playgroud)

这可能在将来帮助其他人,因此发布此信息.

  • 是的,我在使用“ClientID”时遇到了麻烦,因为我使用的是“ClientIDMode = Static”。使用“UniqueID”有效。 (2认同)

And*_*tel 5

老问题,但我想补充一点:调用时,doPostBack()您可以使用服务器处理程序方法进行操作。

例如:

__doPostBack('<%= btn.UniqueID%>', 'my args');
Run Code Online (Sandbox Code Playgroud)

将在服务器上触发:

protected void btn_Click(object sender, EventArgs e)
Run Code Online (Sandbox Code Playgroud)

我没有找到更好的方法来获得论点,所以我仍在使用Request["__EVENTARGUMENT"].