如何使用 __doPostBack()

IT技术 c# javascript asp.net postback
2021-02-06 21:16:39

我正在尝试使用 ASP.NET 创建异步回发__doPostBack(),但我不知道该怎么做。我想使用普通的 JavaScript。

像按钮点击这样简单的事情可能会导致__doPostBack()事件触发。我只是想了解该机制的工作原理。

6个回答

您可以使用名为 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>

并在后面的代码中添加类似这样的内容来读取值并对其进行操作:

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

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

@Wilson 认为您的论点可能是可以映射到 C# 中的对象的 Json 数据,然后您可以使用 Json.net 反序列化/序列化到对象等。
2021-03-11 21:16:39
如果我有两个或多个按钮执行 __doPostBack,那么我如何在 page_load() 中的服务器端区分它们。
2021-04-03 21:16:39
它是参数。__EVENTTARGET 会给你按钮。
2021-04-04 21:16:39
当我有多个参数时会出现什么情况?
2021-04-04 21:16:39
只是一个简单的问题,__EVENTARGUMENT 将是参数还是 btnSave?
2021-04-06 21:16:39

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

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

JavaScript:

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

服务器端Page_Load:

 string parameter = Request["__EVENTARGUMENT"];
 if (parameter == "param1")
     MyButton_Click(sender, e);
或者设置 的ClientIDMode="Static"属性MyButton,这样 ASP 就不会破坏按钮的 ID。
2021-03-13 21:16:39
应该使用 UniqueID,而不是 ClientID。
2021-04-04 21:16:39

这是有关如何工作简要教程__doPostBack()

老实说,我用得不多;至少直接。许多服务器控件(例如 、ButtonLinkButton、 的ImageButton部分GridView等)__doPostBack用作它们的回发机制。

6 年后快进;如果仍然使用这个,我会感到震惊。Web 开发的方法通常已经摆脱了使用这样的东西的心态。
2021-03-10 21:16:39
快进 6 年了……而 ASP.NET Web 窗体仍然这样做。因此,接受的答案获得压倒性的赞成。
2021-03-26 21:16:39
@kbrimington:我没有说 ASP.NET 不会“仍然这样做”。我不希望它有太大变化。我的意思是,使用 ASP.NET WebForm 进行新开发的人越来越少,而其他人正在迁移它。
2021-03-29 21:16:39
@Phil - 哈哈,昨天我正在阅读这个线程,同时查看实现它的错误:) 在这个时代看起来确实很过时
2021-04-05 21:16:39

我只是想为这篇文章添加一些东西asp:button我试过 clientId ,但它似乎对我不起作用:

__doPostBack('<%= btn.ClientID%>', '');

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

__doPostBack('<%= btn.UniqueID%>', '');

这可能会在将来对其他人有所帮助,因此发布此信息。

我一直在努力让它发挥作用,但 ClientID 和 UniqueId 都不适合我。
2021-03-13 21:16:39
我的天啊!几天试图解决这个问题。UniqueID 确实解决了这个问题。多谢,伙计!
2021-03-13 21:16:39
是的,我遇到了麻烦ClientID,因为我正在使用ClientIDMode = Static. 使用UniqueID工作。
2021-03-14 21:16:39

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

例如:

__doPostBack('<%= btn.UniqueID%>', 'my args');

将在服务器上触发:

protected void btn_Click(object sender, EventArgs e)

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