ASP.NET postback with JavaScript

Posted chucklu

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ASP.NET postback with JavaScript相关的知识,希望对你有一定的参考价值。

ASP.NET postback with JavaScript

Here is a complete solution

Entire form tag of the asp.net page

<form id="form1" runat="server">
    <asp:LinkButton ID="LinkButton1" runat="server" /> <%-- included to force __doPostBack javascript function to be rendered --%>

    <input type="button" id="Button45" name="Button45" onclick="javascript:__doPostBack(‘ButtonA‘,‘‘)" value="clicking this will run ButtonA.Click Event Handler" /><br /><br />
    <input type="button" id="Button46" name="Button46" onclick="javascript:__doPostBack(‘ButtonB‘,‘‘)" value="clicking this will run ButtonB.Click Event Handler" /><br /><br />

    <asp:Button runat="server" ID="ButtonA" ClientIDMode="Static" Text="ButtonA" /><br /><br />
    <asp:Button runat="server" ID="ButtonB" ClientIDMode="Static" Text="ButtonB" />
</form>

Entire Contents of the Page‘s Code-Behind Class

 public partial class Main : Page
    
        protected void Page_Load(object sender, EventArgs e)
        
            ButtonA.Click += ButtonA_Click;
            ButtonB.Click += ButtonB_Click;
        

        private void ButtonA_Click(object sender, EventArgs e)
        
            Response.Write("You ran the ButtonA click event");
        

        private void ButtonB_Click(object sender, EventArgs e)
        
            Response.Write("You ran the ButtonB click event");
        
    

The LinkButton is included to ensure that the __doPostBack javascript function is rendered to the client.

Simply having Button controls will not cause this __doPostBack function to be rendered.

This function will be rendered by virtue of having a variety of controls on most ASP.NET pages, so an empty link button is typically not needed

 

What‘s going on?

Two input controls are rendered to the client:

<input type="hidden" name="__EVENTTARGET" id="__EVENTTARGET" value="" />
<input type="hidden" name="__EVENTARGUMENT" id="__EVENTARGUMENT" value="" />
  • __EVENTTARGET receives argument 1 of __doPostBack
  • __EVENTARGUMENT receives argument 2 of __doPostBack

The __doPostBack function is rendered out like this:

function __doPostBack(eventTarget, eventArgument) 
    if (!theForm.onsubmit || (theForm.onsubmit() != false)) 
        theForm.__EVENTTARGET.value = eventTarget;
        theForm.__EVENTARGUMENT.value = eventArgument;
        theForm.submit();
    

As you can see, it assigns the values to the hidden inputs.

When the form submits / postback occurs:

  • If you provided the UniqueID of the Server-Control Button whose button-click-handler you want to run (javascript:__doPostBack(‘ButtonB‘,‘‘), then the button click handler for that button will be run.

前台JavaScript的theForm.submit();运行后,会触发后台绑定的click事件

 

What if I don‘t want to run a click handler, but want to do something else instead?

You can pass whatever you want as arguments to __doPostBack

You can then analyze the hidden input values and run specific code accordingly:

If Request.Form("__EVENTTARGET") = "DoSomethingElse" Then
    Response.Write("Do Something else") 
End If

Other Notes

  • What if I don‘t know the ID of the control whose click handler I want to run?
    • If it is not acceptable to set ClientIDMode="Static", then you can do something like this: __doPostBack(‘<%= myclientid.UniqueID %>‘, ‘‘).
    • Or: __doPostBack(‘<%= MYBUTTON.UniqueID %>‘,‘‘)
    • This will inject the unique id of the control into the javascript, should you wish it

 

以上是关于ASP.NET postback with JavaScript的主要内容,如果未能解决你的问题,请参考以下文章

EntityFramework 更新在 SaveChanges / ASP.NET MVC / postbacks 上随机失败

在 PostBack (ASP.NET) 上运行 jQuery 函数

什么是ASP.NET中事件回传(PostBack)机制? 请给我一个具体的定义。

Doing or Raising Postback using __doPostBack() function from Javascript in Asp.Net

使用 PostBack 数据浏览页面 javascript Python Scrapy

通过 Postback 在 UpdatePanel 中保留 DIV 的滚动位置