此文章的基础为读者大体了解MS Ajax客户端lib的相关功能。可以下载此书:http://download.csdn.net/detail/robertdong1203/4446291
Sys.WebForms.PageRequestManager._initialize方法如下:
Sys.WebForms.PageRequestManager._initialize = function Sys$WebForms$PageRequestManager$_initialize(scriptManagerID, formElement) {
Sys.WebForms.PageRequestManager.getInstance()._initializeInternal(scriptManagerID, formElement);
}
大家可以发现它调用了initializeInternal方法_initializeInternal: Sys$WebForms$PageRequestManager$_initializeInternal:
function Sys$WebForms$PageRequestManager$_initializeInternal(scriptManagerID, formElement) {
...
his._form.onsubmit = null;
this._onFormSubmitHandler = Function.createDelegate(this, this._onFormSubmit);
...
Sys.UI.DomEvent.addHandler(this._form, 'submit', this._onFormSubmitHandler);
...
}
那么在前端调用form.submit()是就会调用_onFormSubmit (_onFormSubmit: Sys$WebForms$PageRequestManager$_onFormSubmit):
function Sys$WebForms$PageRequestManager$_onFormSubmit(evt) {
...
var request = new Sys.Net.WebRequest();
...
request.get_headers()['X-MicrosoftAjax'] = 'Delta=true';
request.get_headers()['Cache-Control'] = 'no-cache';
...
request.invoke();
...
evt.preventDefault();
}
从中可以发现此方法,按要求新建了一个Sys.Net.WebRequest,将此request发回服务器端,并且取消submit的默认行为