【问题标题】:Attribute based error handling for ajax requests? (Is it worthwile?)ajax请求的基于属性的错误处理? (值得吗?)
【发布时间】:2011-05-05 07:33:19
【问题描述】:

当我将 Ajax.BeginForm 发布到返回部分视图的操作时,我会在 ViewData 项中发送错误信息。

目前,为了处理所有错误,我必须将所有方法包装在 try catch 语句中。

[HttpPost, ValidateAntiForgeryToken]
public virtual ActionResult Save(int id, FormCollection form)
{
    MyModel model;
    try
    {
        ...do stuff...

    }
    catch(Exception ex)
    {
        ...log...
        ViewData["ResultInfo"] = new ResultInfo(false, Resource.SAVE_NOT_SAVED, someErrorMessage);
    }

    return PartialView("Folder/SomeView", model);
}

我想用一个自定义的 HandleError 属性来做到这一点,但我意识到肯定有很多陷阱在等待解决。有没有人尝试过并想分享他们的经验?

编辑:
我最终在控制器基类中进行了错误处理。

这个 ErrorHandlingController 有 2 个方法; RegisterErrorHandler 和 RegisterModel。如果在基类 OnException 中发现错误时发现错误处理程序已注册,我只需添加 ResultInfo 并将错误标记为已处理,并使用我在 RegisterErrorHandler 中设置的视图和错误标题。

这样很容易将模型获取到错误处理程序,并且很自然地直接使用资源,因为错误处理程序注册为方法内部的第一行,而不是方法外部的属性。

【问题讨论】:

    标签: asp.net-mvc attributes error-handling


    【解决方案1】:

    【讨论】:

    • 这是一篇有趣的 +1 帖子,但该解决方案应用于 Ajax.BeginForms 时存在问题。为了使表单不为空,至少需要返回一个使用关联视图呈现的空模型。
    • @Carl R - 好吧,从好的方面来说,它会迫使您采用一种良好的做法,例如为该视图创建一个视图模型,作为额外的奖励,这将允许你摆脱那个丑陋的FormsCollection参数;)
    • 好吧,“MyModel”是一个视图模型,丑陋的 FormsCollection 参数是最容易实现的部分,因为它可以从 HandleError 子类轻松访问。创建正确类型的视图模型并返回正确的视图是困难的部分。 :)
    猜你喜欢
    • 2017-06-08
    • 2014-01-16
    • 1970-01-01
    • 2016-11-16
    • 2012-11-19
    • 1970-01-01
    • 2017-07-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多