我有一个使用asp.net mvc创建的留言簿表格。
必须通过从下拉控件中选择值来填写有效的gender
表单字段。下拉控件有3个选项,即默认选择“--Select--”,“Female”,“Male”和“--Select--”。数据模型已设置为强制访问者选择女性或男性,但不选择“ - 选择 - ”。
我们知道访问者有机会调整表单数据,因此他可以提交指向数据库中不存在的值的gender
表单字段。
我的问题是:
SaveChanges()
?答案 0 :(得分:1)
这取决于您是否需要向用户提供特定错误或干净的验证消息。如果用户试图篡改表单帖子,我不会太在意用户体验。
如果您关心这一点,可以使用IValidatableObject
界面对合法值进行验证:
public class Person : IValidatableObject
{
public string Gender { get; set; }
public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
{
//ValidGenders is a list of valid values, retrieved from the database
if (!ValidGenders.Contains(Gender))
{
yield return new ValidationResult("Gender is not valid", new string[] { "Gender" });
}
}
}
模型验证使用IValidatableObject
执行验证,就像使用数据注释验证一样。
另一方面,如果您不关心用户体验,可以在数据库中发生错误,并使用标准错误处理管道处理问题。假设您的外键约束已到位,操作将失败,因为在Genders表中找不到Gender值,或者您的设置可能是什么。
答案 1 :(得分:0)
不确定您是否使用任何形式的DTO或Business Objects,但除了验证对象客户端(或MVC内)之外,您的对象也可能值得验证。
这样您就可以在遇到数据库之前发现任何问题。有关该主题的SO上有趣的帖子可以在这里找到:Should Business Objects or Entities be Self-Validated?