数据验证不会强制进行模型验证?

时间:2009-09-09 03:59:18

标签: asp.net-mvc validation model controller

我遵循了以下教程:

http://www.asp.net/learn/mvc/tutorial-39-cs.aspx http://schotime.net/blog/index.php/2009/03/31/integrating-xval-validation-with-linq-to-sql/

为了使用Data Annotation为LINQ-To-SQL生成的类强制执行数据验证。元数据类如下所示:

[MetadataType(typeof(PositionValidation))]
public partial class Position
{
}

public class PositionValidation
{
    [Required]
    public string Title { get; set; }
}

验证工作正常,但前提是我在控制器中执行此操作:

if (ModelState.IsValid)
{
    _positions.AddPosition(newPosition);
    return RedirectToAction("List");
}

如果我省略了对有效ModelState的检查,它将尝试将其添加到数据库中,即使Title为空。结果,我得到一个空白标题的条目(这也适用于编辑)。

除了控制器/视图之外,我还认为数据验证也会为模型方强制执行。这是否意味着我必须在Position类中添加额外的代码来进行验证?如果是这样,这不会违反DRY吗?

1 个答案:

答案 0 :(得分:0)

换句话说(如果我错了,请告诉我),如果数据注释验证失败,您预计您的操作根本不会被执行。这是省略if(Model.IsValid)语句的唯一方法。

您的假设不正确,这是设计的。事实上,这是一个非常好的功能,而不是一个麻烦。您只添加一行代码,以检查是否有错误,作为回报,您可以:

  • 添加您自己的错误来自业务逻辑,因此当DA正常时,它们会立即显示给用户,而不是在下次提交时显示
  • 重置错误或自定义错误
  • 重定向到其他视图,或在某些条件下执行任何操作(例如记录)