2010-09-21 58 views
1

我有一个包含多个div的页面。对一个div的操作改变了其他div的内容。 每个div从控制器加载一个局部视图。例如 - “搜索”的div和“SearchResult”的另一个div。 “Search”div包含几个字段和一个按钮。单击此按钮时,将使用Ajax异步调用控制器方法。此控制器方法可以返回“搜索结果”部分视图或抛出异常。Elmah和局部视图

在成功的方法执行,我的Ajax回调将更新使用由控制器方法返回的局部视图数据的“信息搜索结果”格的内容。

对于所有未处理的异常,我使用ELMAH。基于上述设计,我希望Elmah记录错误并重定向到部分视图。我已经尝试过客户端,它适用于View。一种选择是删除Error.aspx并设置defaultHandler来调用控制器的另一个方法(比如说MyCustomError),该方法可以将Custom错误作为部分视图返回。 如何在此“MyCustomError”方法或“MyCustomError”部分视图中获取原始异常详细信息?

编辑:对于ELMAH,我使用ELMAH作者的解决方案 - How to get ELMAH to work with ASP.NET MVC [HandleError] attribute?

+0

当你说“重定向到一个局部视图”,你的意思是你会做的另一个AJAX请求,让“信息搜索结果”格贵局部视图的内容会被替换? – StriplingWarrior 2010-09-21 17:42:43

回答

2

也许通过异常的模型局部视图?

更新

public ActionResult DoSomething() 
{ 

    try 
    { 
     ... 
    } 
    catch(Exception e) 
    { 
     // send the error to Elmah 
     ErrorSignal.FromCurrentContext().Raise(e); 
     // pass it to the error display partial view. 
     return View("ErrorDisplayControl",e); 
    } 

    return View(); 

} 

如果您在使用RenderAction()而不是RenderPartial()包括这在你的主视图,您可以登录该错误,然后返回正确的视图。

而且,你可能知道,你应该提出一个更友好的错误给用户,而不是真正的异常信息。不仅是异常信息会让用户感到困惑,只要将这些原始数据提供给客户端就会引起一些安全问题。

+0

问题是,应该首先将异常记录到Elmah中,以便将其记录下来。 – byte 2010-09-22 08:44:56

+0

查看我的更新.. – 2010-09-22 14:48:26

+0

感谢David,我目前有类似的代码,就像你上面给出的那样,减去ErrorSignal ***行。如果您看到我上面的编辑,我已经展示了我正在使用的Elmah解决方案。这有助于在代码中随处编写HandleError属性而不是ErrorSignal ***。但是,您所提供和我已经在我的应用程序不会在上面的链接 – byte 2010-09-22 15:35:27

1

TempData属性这样的事情效果很好。您输入TempData的任何信息将通过以下请求停留在那里。因此,如果您在出现错误信息时将错误信息发送到错误页面,然后您的客户端代码为错误页面创建新的ajax请求,则错误控制器操作或部分视图可以从TempData中检索错误信息。

+0

通过解决“重定向到局部视图”我的意思一旦Elmah记录异常,我的自定义错误页面应该被返回。 web.config中customErrors的defaultRedirect属性或HandleError属性的“View”参数。 在我的情况下,我想要返回一个局部视图。 – byte 2010-09-22 08:40:42