在ASP.MVC 3.0中验证

时间:2011-12-14 10:44:23

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

我有一个模型类:

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

我希望检查Yeae是否唯一或没有条件年份不是唯一的应用程序向用户显示错误消息。如何检查年份是否重复?

3 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分: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 :(得分:1)

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

让我解释一下:

  • 数据访问是一个数据层问题
  • 验证是业务层事项
  • 用户输入和反馈是一件小事

使用DataAnnotations,你可以混合3合1。它可以更快,但肯定没有很好的设计。

你可以尝试一种更具纪律性的方法,如下:

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