0

我是 ASP.NET MVC、Kendo UI (razor)、Jquery 的新手。我有一个抛出 3 种错误的应用程序

  1. 未处理的异常(400、403,500 503 等) - 抛出通用异常
  2. 预期的异常/错误(自定义异常) - 例如,尝试创建系统中已存在的联系人 - 系统需要抛出“Contact_duplicated_exception”并将其显示给用户,因为“之前已创建联系人。此操作无法继续”。
  3. 模型状态错误 (UI)。我使用 @Html.ValidationSummary(true) 添加到模型状态以显示在页面上的错误

在整个应用程序中处理上述问题的最佳标准方法是什么?我需要使用 Jquery Ajax [POST] 将这些消息发送回用户。

我使用了以下概念,但我需要实现处理上述问题的标准方法 1. 我使用过 ELMAH(用于未处理的异常) 2. global.asax.cs 中的 Application_Error(object sender, EventArgs e) 3. 自定义 HandleErrorArrtibute公共类 HandleErrorWithAjaxFilter : HandleErrorAttribute, IExceptionFilter

谢谢!

4

1 回答 1

0

对于#1 和#3,你看起来不错,恕我直言。但是,我认为您的弱点是#2,原因如下:

  1. 如果预期异常,则不应允许它落入 Application_Error;因为,嗯......这是预期的,它是工作流程,而不是例外。
  2. 因此,作为对用户输入的反应和工作流程的一部分,它应该作为#3 的一部分来处理。

因此,在您的情况下,我将在查找重复项的特定实例中进行,将验证属性添加到可能重复的类中,如下所示:

[AttributeUsage(AttributeTargets.Class)]
public class UniqueContactAttribute : ValidationAttribute
{
    public override bool IsValid(object value)
    {
        bool isValid = true;
        Contact contact = value as Contact;
        if(contact != null)
        {
            // check for your duplicate in the database and set isValid to false if you find one.
        }
        return isValid;
    }
}

元数据类的用法:

[UniqueContact(ErrorMessage = "Contact was previously created. This action could not proceed.")]
public class Contact_Validation
{

}
于 2013-08-05T19:04:23.683 回答