ScriptManager控件包括在ASP.NET 2.0 AJAX Extensions中,它用来处理页面上的所有组件以及页面局部更新,所有需要支持ASP.NET AJAX的ASP.NET页面上有且只能有一个ScriptManager控件。TerryLee 的第一个例子中,放了一个ScriptManager控件,但实际使用的是UpdatePanel控件,是每个页面必须有一个ScriptManager控件呢,还是在这个例子里可以没有呢?
再说UpdatePanel控件,其实很简单,只是在ContentTemplate里放了两个服务器端控件,使用方法和平时一样,但这样就实现了控件执行服务器端事件而无刷新,呵呵,是挺方便的。
第二个例子,是一个错误处理的例子,在页面回传时如果发生了异常AsyncPostBackError事件将被触发,错误信息的处理依赖于AllowCustomErrors属性、AsyncPostBackErrorMessage属性和Web.config中的<customErrors>配置区,先看一下完整的代码:
郁闷!这里发文章居然有字数限制,代码粘不上来:(
例子中有一个ScriptManager控件ScriptManager1,设置了OnAsyncPostBackError="ScriptManager1_AsyncPostBackError",也就是当发生异常时,调用ScriptManager1_AsyncPostBackError方法。
protected void ScriptManager1_AsyncPostBackError(object sender, AsyncPostBackErrorEventArgs e)
{
ScriptManager1.AsyncPostBackErrorMessage = "异常信息为:" + e.Exception.Message;
}
在UpdatePanel中放了一个Lable和两个Button,Label用来显示信息,Button分别触发一个成功和一个抛出异常的方法:
protected void ErrorProcessClick_Handler(object sender, EventArgs e)
{
throw new ArgumentException();
}
protected void SuccessProcessClick_Handler(object sender, EventArgs e)
{
UpdatePanelMessage.Text = "The asynchronous postback completed successfully.";
}
可以看到,成功,则设置Label的属性,失败则抛出异常,ScriptManager遇到异常后,设置了AsyncPostBackErrorMessage属性。
看一下两个按钮:
<asp:Button runat="server" ID="Button1" Text="Submit Successful Async Postback"
OnClick="SuccessProcessClick_Handler" OnClientClick="ClearErrorState()" />
<asp:Button runat="server" ID="Button2" Text="Submit Async Postback With Error"
OnClick="ErrorProcessClick_Handler" OnClientClick="ClearErrorState()" />
除了设置OnClick外,还设置了OnClientClick,以前真不知道这个东西到底有什么用,是先执行OnClientClick再执行OnClick?还是?看完这个例子,也不太明白,呵呵,ClearErrorState做的事就是清除了出错的信息,
页面上的JS如下:
<script type="text/javascript" language="javascript">
var divElem = 'AlertDiv';
var messageElem = 'AlertMessage';
var errorMessageAdditional = 'Please try again.';
var bodyTag = 'bodytag';
Sys.WebForms.PageRequestManager.getInstance().add_endRequest(EndRequestHandler);
function ToggleAlertDiv(visString)
{
if (visString == 'hidden')
{
$get(bodyTag).style.backgroundColor = 'white';
}
else
{
$get(bodyTag).style.backgroundColor = 'gray';
}
var adiv = $get(divElem);
adiv.style.visibility = visString;
}
function ClearErrorState() {
$get(messageElem).innerHTML = '';
ToggleAlertDiv('hidden');
}
function EndRequestHandler(sender, args)
{
if (args.get_error() != undefined && args.get_error().httpStatusCode == '500')
{
var errorMessage = args.get_error().message
args.set_errorHandled(true);
ToggleAlertDiv('visible');
$get(messageElem).innerHTML = '"' +
errorMessage + '" ' + errorMessageAdditional;
}
}
</script>
很简单,有点糊涂的是 Sys.WebForms.PageRequestManager.getInstance().add_endRequest(EndRequestHandler);这句话,页面调用完要执行的吗?还是?......看来还是有很多基础的东东要学呀
再说UpdatePanel控件,其实很简单,只是在ContentTemplate里放了两个服务器端控件,使用方法和平时一样,但这样就实现了控件执行服务器端事件而无刷新,呵呵,是挺方便的。
第二个例子,是一个错误处理的例子,在页面回传时如果发生了异常AsyncPostBackError事件将被触发,错误信息的处理依赖于AllowCustomErrors属性、AsyncPostBackErrorMessage属性和Web.config中的<customErrors>配置区,先看一下完整的代码:
郁闷!这里发文章居然有字数限制,代码粘不上来:(
例子中有一个ScriptManager控件ScriptManager1,设置了OnAsyncPostBackError="ScriptManager1_AsyncPostBackError",也就是当发生异常时,调用ScriptManager1_AsyncPostBackError方法。
protected void ScriptManager1_AsyncPostBackError(object sender, AsyncPostBackErrorEventArgs e)
{
ScriptManager1.AsyncPostBackErrorMessage = "异常信息为:" + e.Exception.Message;
}
在UpdatePanel中放了一个Lable和两个Button,Label用来显示信息,Button分别触发一个成功和一个抛出异常的方法:
protected void ErrorProcessClick_Handler(object sender, EventArgs e)
{
throw new ArgumentException();
}
protected void SuccessProcessClick_Handler(object sender, EventArgs e)
{
UpdatePanelMessage.Text = "The asynchronous postback completed successfully.";
}
可以看到,成功,则设置Label的属性,失败则抛出异常,ScriptManager遇到异常后,设置了AsyncPostBackErrorMessage属性。
看一下两个按钮:
<asp:Button runat="server" ID="Button1" Text="Submit Successful Async Postback"
OnClick="SuccessProcessClick_Handler" OnClientClick="ClearErrorState()" />
<asp:Button runat="server" ID="Button2" Text="Submit Async Postback With Error"
OnClick="ErrorProcessClick_Handler" OnClientClick="ClearErrorState()" />
除了设置OnClick外,还设置了OnClientClick,以前真不知道这个东西到底有什么用,是先执行OnClientClick再执行OnClick?还是?看完这个例子,也不太明白,呵呵,ClearErrorState做的事就是清除了出错的信息,
页面上的JS如下:
<script type="text/javascript" language="javascript">
var divElem = 'AlertDiv';
var messageElem = 'AlertMessage';
var errorMessageAdditional = 'Please try again.';
var bodyTag = 'bodytag';
Sys.WebForms.PageRequestManager.getInstance().add_endRequest(EndRequestHandler);
function ToggleAlertDiv(visString)
{
if (visString == 'hidden')
{
$get(bodyTag).style.backgroundColor = 'white';
}
else
{
$get(bodyTag).style.backgroundColor = 'gray';
}
var adiv = $get(divElem);
adiv.style.visibility = visString;
}
function ClearErrorState() {
$get(messageElem).innerHTML = '';
ToggleAlertDiv('hidden');
}
function EndRequestHandler(sender, args)
{
if (args.get_error() != undefined && args.get_error().httpStatusCode == '500')
{
var errorMessage = args.get_error().message
args.set_errorHandled(true);
ToggleAlertDiv('visible');
$get(messageElem).innerHTML = '"' +
errorMessage + '" ' + errorMessageAdditional;
}
}
</script>
很简单,有点糊涂的是 Sys.WebForms.PageRequestManager.getInstance().add_endRequest(EndRequestHandler);这句话,页面调用完要执行的吗?还是?......看来还是有很多基础的东东要学呀
浙公网安备 33010602011771号