如何在mvc中捕获渲染异常? (我正在使用第一版)
我从值得案例场景开始 - 在.ascx文件中编译时错误,这是我发现的:
1)在调试模式下,visual studio表示 Controller.ExecuteCore(),InvokeAction 行中存在未处理的异常:
try {
string actionName = RouteData.GetRequiredString("action");
if (!ActionInvoker.InvokeAction(ControllerContext, actionName)) { // this line
HandleUnknownAction(actionName);
}
}
finally {
TempData.Save(ControllerContext, TempDataProvider);
}
2)不调用Application.OnError
3)未调用Controller.OnError
4)当我在这里注入catch()时,它也没有被触发。
5)尝试..不会触发主页中的catch(通过它在stacktrace中存在!)
6)尝试..页面中的catch没有被触发(它也出现在stacktrace中!)
当我包装特定的RenderPartial方法时,我能够捕获异常 ,如下所示:
<% try
{ %>
<%Html.RenderPartial("Search/" + Model.SearchCategory + "SearchList", Model); %>
<%}
catch (Exception ex)
{ %><% HttpContext.Current.Response.Redirect("/en/App/Error"); %><% } %>
我能做些什么呢?
答案 0 :(得分:0)
不确定这是否有帮助,但您是否尝试在项目中打开MvcBuildViews选项?据我所知(我自己还在学习MVC),视图是“按需”编译的,而不是在项目构建时。这可能会显示以前未检测到的错误。默认设置为关闭。
要打开它,请在VS中卸载项目,打开项目文件并在XML中将MvcBuildViews选项更改为“true”。然后重新加载项目。
答案 1 :(得分:0)
看一下使用filter属性来捕获这种行为。
例如:
public class CustomAttribute : ActionFilterAttribute
{
public override void OnResultExecuted(ResultExecutedContext filterContext)
{
if(filterContext.Exception != null)
{
//YOU SHOULD BE ABLE TO SEE YOUR EXCEPTION HERE.
Trace.WriteLine(Exception.Message);
}
}
}
然后用[CustomAttribute]
[CustomAttribute]
public class SomeController : Controller
{
//Controller stuff
}
您还可以使用其他一些替代功能,请查看。