我正在尝试使用 __doPostBack()在 ASP.NET 中创建一个异步回发,但是我不知道怎么做。我想使用普通的 JavaScript。
__doPostBack()
一些简单的操作,比如按钮单击,就可以导致 __doPostBack()事件触发。我只是想知道这个机制是怎么运作的。
下面是 简短教程的 __doPostBack()工作原理。
老实说,我不经常使用它,至少直接使用。许多服务器控件(例如,Button、 LinkButton、 ImageButton、 GridView的一部分,等等)使用 __doPostBack作为它们的回发机制。
Button
LinkButton
ImageButton
GridView
__doPostBack
你可以在你的 web 表单中用一个叫做 btnSave 的按钮来尝试,例如:
<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 }
试一下,看看有没有用。
这也是让服务器端控件在 FancyBox 和/或 jQuery 对话框中回发的一种好方法。 例如,在 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); }
服务器端页面负载:
string parameter = Request["__EVENTARGUMENT"]; if (parameter == "param1") MyButton_Click(sender, e);
我只是想为 asp:button的这篇文章添加一些东西。我试过 clientId,但似乎对我不起作用:
asp:button
__doPostBack('<%= btn.ClientID%>', '');
但是,获取 UniqueId 似乎会回发到服务器,如下所示:
__doPostBack('<%= btn.UniqueID%>', '');
这可能有助于其他人在未来,因此张贴这一点。
这是个老问题了,但我想补充一点: 当调用 doPostBack()时,您可以使用服务器处理程序方法执行操作。
doPostBack()
举个例子:
__doPostBack('<%= btn.UniqueID%>', 'my args');
将在服务器上启动:
protected void btn_Click(object sender, EventArgs e)
我没有找到更好的方法来得到论点,所以我仍然使用 Request["__EVENTARGUMENT"]。
Request["__EVENTARGUMENT"]
正如其他人所说的,您需要向 _ _ doPostback ()方法提供控件的 UniqueID。
__doPostBack('<%= btn.UniqueID %>', '');
在服务器上,提交的表单值由页面中字段的 姓名属性标识。
UniqueID工作的原因是,当服务器控件以 HTML 呈现时,UniqueID和 姓名实际上是相同的。
下面是一篇描述 UniqueID 的文章:
UniqueID 属性还用于为 HTML 提供值 输入字段的“ name”属性(复选框、下拉列表和 UniqueID 在回发中也扮演着重要的角色 服务器控件的 UniqueID 属性,该属性支持回发, 为 _ _ EVENTTARGET 隐藏字段提供数据 然后使用 _ _ EVENTTARGET 字段查找触发的控件 然后调用其 RaisePostBackEvent 方法。 Src: Https://www.telerik.com/blogs/the-difference-between-id-clientid-and-uniqueid
UniqueID 属性还用于为 HTML 提供值 输入字段的“ name”属性(复选框、下拉列表和 UniqueID 在回发中也扮演着重要的角色 服务器控件的 UniqueID 属性,该属性支持回发, 为 _ _ EVENTTARGET 隐藏字段提供数据 然后使用 _ _ EVENTTARGET 字段查找触发的控件 然后调用其 RaisePostBackEvent 方法。
Src: Https://www.telerik.com/blogs/the-difference-between-id-clientid-and-uniqueid
我就是这么做的
public void B_ODOC_OnClick(Object sender, EventArgs e) { string script="<script>__doPostBack(\'fileView$ctl01$OTHDOC\',\'{\"EventArgument\":\"OpenModal\",\"EncryptedData\":null}\');</script>"; Page.ClientScript.RegisterStartupScript(this.GetType(),"JsOtherDocuments",script); }