【发布时间】:2010-12-06 00:20:21
【问题描述】:
当在我的菜单中单击一个菜单项时,一个 ASCX 控件会通过我的 asp 面板中的 AJAX 加载。为此,我有一个方法:
public void LoadControl(ControlDestination controlDestination, string filename)
{
try
{
// Load control from file
Control control = LoadControl(filename);
// Check control extends BaseForm
// Do stuff
}
else
{
throw new Exception("Web User Control erft niet van BaseForm.");
}
}
catch (ArgumentNullException e)
{
// Implement
}
catch(HttpException e)
{
LoadControl(ControlDestination.Menu, "Error.ascx");
throw new Exception("User control niet gevonden: " + e.ToString());
}
}
当我在 HttpException 处设置断点时,我到达了那里。我按 F11 并执行 LoadControl 中的代码。然后弹出异常。这一切都很顺利,但永远不会加载 Error.ascx。我知道该方法有效,因为当我想通过此方法加载其他 ASCX 对象时,它有效。但是当我想加载 Error.ascx 时出错了。
如果我注释掉 throw new Exception("User control niet gevonden" + e.ToString()); 我可以看到 Error.ascx我希望这两行都被执行。
编辑:
在我的母版页中,我有这段 javascript 代码来捕获一些异常:
function pageLoad() {
var manager = Sys.WebForms.PageRequestManager.getInstance();
manager.add_endRequest(endRequest);
manager.add_beginRequest(beginRequest);
}
function endRequest(sender, args){
var Error = args.get_error();
if (Error != null) {
ToggleErrorOn(true);
document.getElementById("ErrorContent").innerHTML = Error.message;
args.set_errorHandled(true);
}
}
【问题讨论】:
-
嗯,如果您在加载控件后抛出异常,您的整个页面将被“执行”,除非您在调用“LoadControl”方法时捕获了该异常。
-
什么意思,我的整个页面都会被执行?