在菜单中单击菜单项时,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时出错了。
如果我注释掉抛出新的异常(“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);
}
}
答案 0 :(得分:0)
未捕获的异常会导致更新面板无法呈现任何渲染。相反,它将错误代码中继回AJAX处理程序,该处理程序显示错误消息。
因此,如果你继续抛出该异常,你的Error.ascx永远不会被渲染。
更新:
你的javascript太晚捕获了异常。 UpdatePanel管道已经将自己视为“错误”状态。任何由您的代码隐藏抛出但未在代码隐藏中捕获的异常将导致UpdatePanel删除它将呈现的所有HTML并返回一个简单的错误代码。然后你的javascript函数处理。
答案 1 :(得分:0)
在UpdatePanel
ASP.NET中触发服务器端方法时,请执行以下操作:
如果在第一步中有未处理的Exception
,则AJAX调用失败,无法更新原始面板。这是一张图from the ASP.NET AJAX web site:
考虑如果你在Exception
中投掷未处理的Page_Load
会发生什么。在这种情况下,ASP.NET无法完成HTML的构建,而且在这里也不能这样做。