ASP.NET 是无状态的。也就是说,每次请求页面时,服务器实际上都会构造整个页面及其控件和状态,然后响应请求。然后它呈现适当的 HTML 标记作为对请求的响应。
对于任何控件,如果将 autopostback 属性设置为 true,则如果控件导致回发(例如单击链接按钮),则页面将回发到服务器。
ASP.NET 如何回发页面?它使用一个名为 _doPostBack() 的 javascript 函数来完成。功能是 -
function __doPostBack(eventTarget, eventArgument) {
if (!theForm.onsubmit || (theForm.onsubmit() != false)) {
theForm.__EVENTTARGET.value = eventTarget;
theForm.__EVENTARGUMENT.value = eventArgument;
theForm.submit();
}
该函数用于将表单提交回服务器。_doPostBack 通过使用隐藏变量 __EVENTTARGET 和 __EVENTARGUMENT 接受参数 - 事件目标和事件参数。这告诉服务器哪个控件导致了回发,并将适当的参数传递给服务器。
如果您的 aspx 页面中有此代码 -
<asp:LinkButton ID="lnkButton" runat="server">LinkButton</asp:LinkButton>
相应生成的标记将是 -
<a id="LinkButton1" href="javascript:__doPostBack('lnkButton','')">LinkButton</a>
因此,假设您单击链接按钮,该页面由 __doPostBack() 函数回发。然后,在服务器上使用页面上的相应控件状态重新创建页面。为了获取页面上每个控件的状态,使用了 viewstate 等机制。加载页面后,服务器会计算并呈现响应标记。