Elmah 和部分视图

发布于 2024-09-24 10:56:02 字数 708 浏览 5 评论 0原文

我有一个包含多个 div 的页面。对一个 div 执行的操作会更改另一 div 的内容。 每个 div 都会从控制器加载部分视图。例如,一个 div 代表“Search”,另一个 div 代表“SearchResult”。 “搜索”div 包含几个字段和一个按钮。单击此按钮后,将使用 Ajax 异步调用控制器方法。此控制器方法可以返回“搜索结果”部分视图或引发异常。

成功执行方法后,我的 Ajax 回调将使用控制器方法返回的部分视图数据来更新“SearchResult”div 的内容。

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

编辑:对于 Elmah,我正在使用 Elmah 作者的解决方案 - 如何让 ELMAH 与 ASP.NET MVC [HandleError] 属性一起使用?

I have a page that contains multiple div's. Action on one div changes the content of other div.
Each div loads a partial view from controller. For example- a div for "Search" and another div for "SearchResult".
"Search" div contains couple of fields and a button. On click of this button a controller method is invoked asynchronously using Ajax. This controller method can either return a "Search Result" partial view or throw an exception.

On successful method execution, my Ajax callback will update the content of "SearchResult" div using the partial view data returned by the controllers method.

For all unhandled exceptions, I am using Elmah. Based on the above design, I would want Elmah to log an error and redirect to a Partial View. I have tried customerrors and it works for the View. One option is to remove the Error.aspx and set the defaultHandler to invoke another method (say MyCustomError) of controller which can return a Custom error as Partial View.
How do I get the original exception details in this "MyCustomError" method or "MyCustomError" partial view ?

EDIT: For Elmah, I am using the solution by Elmah author - How to get ELMAH to work with ASP.NET MVC [HandleError] attribute?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

音盲 2024-10-01 10:56:02

也许将异常作为模型传递给部分视图?

更新

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())将其包含在主视图中,您可以记录错误,然后返回正确的看法。

此外,您可能意识到应该向用户呈现更友好的错误,而不是真正的异常消息。异常消息不仅会让用户感到困惑,而且向客户端提供此类原始数据还会带来一些安全问题。

Maybe pass the exception as the model to the partial view?

Update

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();

}

If you include this in your main view using RenderAction() as opposed to RenderPartial(), you can log the error and then return the correct view.

Also, you're probably aware that you should present a more friendly error to the user instead of the real exception message. Not only are exception messages confusing to users, providing that sort of raw data to the client introduces some security concerns.

场罚期间 2024-10-01 10:56:02

TempData 属性非常适合此类事情。您放入 TempData 的任何信息都将通过以下请求保留在那里。因此,如果您在错误发生时将错误信息放在那里,然后您的客户端代码向错误页面创建一个新的 ajax 请求,则错误控制器操作或部分视图可以从 TempData 检索错误信息。

The TempData property works well for this sort of thing. Any information you put into TempData will stay there through the following request. So if you put the error information there when it occurs, and then your client-side code creates a new ajax request to the error page, the error controller action or partial view can retrieve the error information from TempData.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文