ASP中的验证.MVC 3.0
本文关键字:MVC 验证 ASP | 更新日期: 2023-09-27 18:17:54
我有一个模型类:
public class YearlyChageRate
{
public int Year { get; set; }
public double Rate { get; set; }
}
,我想检查Yeae是唯一的还是没有,在条件下,Year不是唯一的应用程序向用户显示错误消息。如何检查年度是否重复?
下面是一个很好的例子:http://tugberkugurlu.com/archive/asp-net-mvc-remote-validation-for-multiple-fields-with-additionalfields-property
这里也是:唯一的
MVC验证你可以在你的模型中使用Remote属性来检查数据库中的唯一值。
Remote属性的官方示例:http://msdn.microsoft.com/en-us/library/gg508808(v=vs.98).aspx
还有一个:http://www.a2zdotnet.com/View.aspx?Id=198
您可以在视图模型上使用[Remote]
验证属性。
尽管您可以使用DataAnnotations属性进行验证,并使用[Remote]
属性对DB进行检查,但这并不是一个很好的设计选择。
让我解释一下:
- 数据访问是一个数据层问题
- 验证是业务层的事情
- 用户输入和反馈是ui问题
使用DataAnnotations,你是在1中混合3。它可以更快,但肯定不是很好的设计。
你可以尝试更严格的方法,像这样:
- 在业务层有一个方法,将你的对象作为参数,使用你选择的验证框架在内部执行验证;
- 只有当验证通过时,这个方法才会调用数据访问来持久化对象;
- 这个方法将总是返回到UI的验证对象,加上字段/错误的集合,如果任何东西没有验证;
- 当您在ui中读取该方法的输出时,如果没有错误,您可以显示成功页面,或者重新显示返回验证错误的表单。为此,强烈建议使用
PRG pattern
,因为您不应该在POST
方法上显示页面。谷歌PRG pattern
了解更多。MvcContrib有一个很好的ActionFilter
,称为ModelStateToTempData
,使PRG模式的实现变得微不足道。