如何使用__doPostBack()

时间:2010-08-28 17:04:55

标签: c# javascript asp.net postback

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

点击按钮之类的简单操作可能导致__doPostBack()事件触发。我只是想了解这种机制是如何运作的。

7 个答案:

答案 0 :(得分:141)

您可以在网络表单中使用名为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
}

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

答案 1 :(得分:23)

这也是让服务器端控件在 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);

答案 2 :(得分:13)

这是关于__doPostBack()如何运作的brief tutorial

老实说,我不太习惯;至少直接。许多服务器控件(例如ButtonLinkButtonImageButton,部分GridView等)使用__doPostBack作为其回发机制。< / p>

答案 3 :(得分:7)

我想在asp:button的帖子中添加一些内容。我尝试过clientId,它似乎不适合我:

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

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

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

这可能在将来帮助其他人,因此发布此内容。

答案 4 :(得分:2)

旧问题,但我想添加一些内容:在调用doPostBack()时,您可以使用服务器处理程序方法执行操作。

举个例子:

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

将在服务器上启动:

protected void btn_Click(object sender, EventArgs e)

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

答案 5 :(得分:0)

就像其他人所说的那样,您需要向__doPostback()方法提供控件的UniqueID。

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

在服务器上,提交的表单值由页面中字段的 name 属性标识。

UniqueID 起作用的原因是,当服务器控件以HTML呈现时, UniqueID name 实际上是同一件事。< / p>

这是一篇描述什么是唯一ID的文章:

  

UniqueID属性还用于为HTML提供值   输入字段的“名称”属性(复选框,下拉列表和   隐藏字段)。 UniqueID在回发中也起着重要作用。的   服务器控件的UniqueID属性,支持回发,   提供__EVENTTARGET隐藏字段的数据。 ASP.NET运行时   然后使用__EVENTTARGET字段查找触发了   回发,然后调用其RaisePostBackEvent方法。

     

src:   https://www.telerik.com/blogs/the-difference-between-id-clientid-and-uniqueid

答案 6 :(得分:0)

这就是我的做法

    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);               
    }