【问题标题】:Data validation does not enforce model validation?数据验证不强制执行模型验证?
【发布时间】:2009-09-09 03:59:18
【问题描述】:

我遵循了这些教程:

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/

为了使用数据注释对 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 吗?

【问题讨论】:

    标签: asp.net-mvc validation model controller


    【解决方案1】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-11-28
      • 1970-01-01
      • 2014-01-08
      • 1970-01-01
      • 2018-07-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多