【问题标题】:Validation in ASP.MVC 3.0ASP.MVC 3.0 中的验证
【发布时间】:2012-01-20 03:33:42
【问题描述】:

我有一个模型类:

public class YearlyChageRate
{
    public int Year { get; set; }
    public double Rate { get; set; }
}

我想检查 Yeae 是否唯一,并且在“年份不是唯一”的情况下,应用程序向用户显示错误消息。如何检查提交的年份是否重复?

【问题讨论】:

  • 您要在哪里执行此检查?一年是独一无二的,这意味着什么?独特在哪里?在数据库中还是什么的?
  • 是的,在数据​​库中是唯一的,我想检查服务器端并向用户显示消息。

标签: c# asp.net asp.net-mvc-3 validation


【解决方案1】:

这是一个很好的例子: http://tugberkugurlu.com/archive/asp-net-mvc-remote-validation-for-multiple-fields-with-additionalfields-property

这里也是:MVC validation for unique

您可以在模型中使用 Remote 属性来检查数据库中的唯一值。

这是远程属性的官方示例:http://msdn.microsoft.com/en-us/library/gg508808(v=vs.98).aspx

还有一个:http://www.a2zdotnet.com/View.aspx?Id=198

【讨论】:

    【解决方案2】:

    您可以在视图模型上使用[Remote] 验证属性。

    【讨论】:

      【解决方案3】:

      虽然您可以使用 DataAnnotations 属性进行验证,并使用 [Remote] 属性对数据库进行检查,但这并不是一个很好的设计选择。

      让我解释一下:

      • 数据访问是数据层的事情
      • 验证是业务层的事情
      • 用户输入和反馈是一个用户界面问题

      使用 DataAnnotations,您可以将 3 合 1 混合在一起。它可以更快,但肯定设计得不好。

      您可以尝试更严格的方法,如下所示:

      • 在业务级别有一个方法,它将您的对象作为参数,使用您选择的验证框架在内部执行验证;
      • 只有在验证通过时,该方法才会调用数据访问来持久化对象;
      • 此方法将始终将经过验证的对象以及未验证的字段/错误集合返回给 UI;
      • 当您在 ui 中读取方法的输出时,如果没有错误,您可以显示成功页面,或者重新显示返回验证错误的表单。为此,强烈建议使用PRG pattern,因为您永远不应该在POST 方法上显示页面。谷歌PRG pattern 了解更多信息。 MvcContrib 有一个不错的 ActionFilter,称为 ModelStateToTempData,可以让 PRG 模式的实现变得微不足道。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-12-02
        • 1970-01-01
        • 2011-05-04
        • 1970-01-01
        相关资源
        最近更新 更多