数据验证不强制执行模型验证?

Posted

技术标签:

【中文标题】数据验证不强制执行模型验证?【英文标题】: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 吗?

【问题讨论】:

【参考方案1】:

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

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

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

【讨论】:

以上是关于数据验证不强制执行模型验证?的主要内容,如果未能解决你的问题,请参考以下文章

Spring Cloud Config Server 在运行 main() 时不强制执行 BASIC 身份验证

代码 = 134110 - 验证错误缺少强制目标属性上的属性值

应该对原始数据还是拆分数据执行交叉验证分数?

Yii框架数据模型的验证规则rules()如何被执行

如何交叉验证 RandomForest 模型?

使用数据注释的依赖属性的自定义模型验证