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 考虑到这一点,您可以很好地看到(您已经注意到)已呈现的< 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 />元素,您还可以查询哪个按钮导致提交! (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |