假设我在ViewModel中有以下选择列表(国家/地区):
//..
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方法)的最佳方法是什么?
答案 0 :(得分:1)
在插入数据库之前,您应始终验证数据服务器端。如果您有一个关键约束,那么这不会是一个问题,因为更新或插入会失败。在这种情况下,您应该有一个服务器端业务规则来在执行SQL调用之前验证您的对象。
由于您从静态项目列表构建列表,因此该业务层可以使用该列表,以便您可以与其进行比较,以确保模型中包含的值有效。您可以向对象添加方法,例如IsValid
或可以进行快速验证的方法,并检查这些硬编码选择的值是否存在。
答案 1 :(得分:1)
我建议您利用DataAnnotations创建自己的custom validation attribute。
这提供了一种封装验证逻辑的方法(满足您的DRY要求),并将应用于服务器端(防止像您描述的那样进行html操作)。