微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

c# – __doPostBack方法如何被调用?调用方法在哪里?

我使用了< asp:Button />控制,并且在浏览器中渲染控件没有分配点击事件属性之后.它是如何调用服务器端事件?

ASPX代码

<asp:Button ID="Button1" runat="server" Text="Button" OnClick="TestClickEvent" />

以上控件在浏览器中呈现如下代码

<input type="submit" name="Button1" value="Button" id="Button1">

以下代码在浏览器中呈现,它设置__EVENTTARGET.我的疑问是__doPostBack方法如何被调用调用方法在哪里?

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

解决方法

简单的答案:__doPostBack JavaScript函数是基于具体的< asp />控件及其处理的事件.

详细答案:这取决于

首先,让我们来看你的例子.你有一个< asp:Button />其被呈现为标准< input type =“submit”/>. ASP.NET WebForms中的一切都围绕着标准的HTML <form>标签. HTML< form>通过点击< input type =“submit”/>来提交没有JavaScript的使用或协助.按钮.

考虑到这一点,您可以很好地看到(您已经注意到)已呈现的< input type =“submit”/>按钮没有分配onclick事件.而且,您可以看到,单击按钮时提交表单.

当< input type =“submit”/>时,如何执行后端(C#/ VB.NET / etc.)代码按钮被点击:它全部由ASP.NET框架本身处理,超出了这个问题/答案的范围.

第二,现在让我们来看看__doPostBack是什么,以及它是如何使用的. __doPostBack只是一个用于提交HTML< form>的帮助JavaScript函数.由于上述原因,您现在知道为什么< input type =“submit”/>按钮不需要调用__doPostBack函数.

为了简单起见,我们来看看一个ASP.NET页面,它具有< asp:DropDownList />控件,它分配了SelectedindexChanged事件处理程序:

<asp:DropDownList ID="MyDropDownList" AutopostBack="true" OnSelectedindexChanged="MyDropDownList_SelectedindexChanged" runat="server" />

< asp:DropDownList />呈现如下:

<select id="ctl00_MyDropDownList" onchange="javascript:setTimeout('__doPostBack(\'ctl00$MyDropDownList\',\'\')',0)" name="ctl00$MyDropDownList"></select>

让我们忽略onchange事件中的setTimeout函数 – 这只是ASP.NET使用的一个恶意的解决方法 – 让我们专注于其中的__doPostBack函数.

正如你可以看到的,__doPostBack函数由onchange事件处理程序调用.关键的区别在于,将< asp:DropDownList />或< select />控件不会导致浏览器提交表单!

再次,ASP.NET框架在内部处理如何在提交表单时执行后端代码(无论是否通过__doPostBack函数).

最后,关于__doPostBack的细节:它接受两个参数 – eventTarget和eventArgument. eventTarget包含导致回发的控件的呈现HTML id属性;而eventArgument是一个可选参数,可用于将附加数据传递给后端代码.

编辑附加信息:OP提出了一个非常有趣的问题 – 当有多个提交按钮时会发生什么?

那么在POST操作期间,浏览器包括< input type =“submit”/>的值.这导致操作启动.

这意味着,正如你获得< input />元素,您还可以查询哪个按钮导致提交!

原文地址:https://www.jb51.cc/csharp/92580.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐