数据验证不强制执行模型验证?
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 身份验证