2010-08-14 131 views
2

比方说,我有一个视图模型下面的选择列表的(国家):ASP.NET MVC 2验证的SelectList

//.. 
private static string[] _countries = new[] { 
"USA", 
"Canada", 
"Japan" 
}; 
//... 
SelectList Countries = new SelectList(_countries, dinner.Country); 
//... 

我呈现以下流行的下拉列表:

<%: Html.DropDownListFor(m => m.Dinner.Country, Model.Countries) %> 

我注意到使用Firebug,我可以将自己的值注入DropDownList,并将该值插入到数据库中。

验证没有注入值(最好是DRY方法)的最佳方法是什么?

回答

1

我会建议您利用DataAnnotations并创建您自己的custom validation attribute

这提供了一种封装验证逻辑(满足您的DRY要求)的方法,并且将应用于服务器端(防止像您所描述的那样的html操作)。

+0

谢谢,这是我正在寻找的答案。 MVC 2特定(注释)而不是一般(布尔方法)。 – KPthunder 2010-08-15 05:10:21

1

在插入数据库之前,您应始终验证数据服务器端。如果你有一个关键的约束,它不会是这样的问题,因为更新或插入会失败。在这种情况下,尽管在执行SQL调用之前,您应该有一个服务器端业务规则来验证您的对象。

由于您从静态项目列表构建列表,因此该列表应该可用于您的业务层,以便您可以与其进行比较以确保模型中包含的值有效。您可以将一种方法添加到您的对象,如IsValid或其他可以快速验证的方法,并检查这些硬编码选择是否存在这些值。