【问题标题】:What are some best practices for Model validation in ASP.NET MVC?ASP.NET MVC 中的模型验证有哪些最佳实践?
【发布时间】:2010-11-28 23:47:18
【问题描述】:

我对有关客户端验证或模型绑定的答案不感兴趣。确实,这个问题可能适用于 MVC 之外的任何数据访问类库,但我认为问题是相似的。

我目前正在使用存储库模式来访问我的实体(模型)的数据。目前,存储库处理所有 CRUD 操作,但我想我希望我的模型负责保存自己以进行验证。我该如何处理?

我可以在我的模型中添加一个 IsValid 方法,存储库可以调用该方法,然后可以在存储库保存模型之前运行我的所有业务逻辑,但是没有什么可以强制存储库调用此验证逻辑,对吗?

如果我希望模型有一个 Save 方法,那么他们保存自己的正确方法是什么?他们不应该回电到存储库吗?

关于我应该如何处理这个问题有什么想法吗?

谢谢!

【问题讨论】:

    标签: asp.net-mvc unit-testing validation model business-logic


    【解决方案1】:

    允许模型验证保存操作本身并没有错;返回 false 或抛出异常甚至是可行的。当您必须向用户提供反馈,说明他们输入的数据为何无效时,就会出现困难。

    验证可以而且应该首先发生在视图中。这可以很容易地使用 jQuery 库在客户端完成。但数据在用户提交后仍需服务器端验证,如果数据仍有问题,仍需向用户说明。

    由于需要提供用户反馈,因此可以在 View Model 对象中有效地提供此类服务器端验证。这个数据对象有两个目的:首先,它将在视图和控制器之间传递的数据封装在一个强类型对象中。其次,它提供了一个方便的地方来执行验证,而不需要控制器或视图中的验证逻辑。

    如果使用 Linq to SQL,视图模型可以是实际数据模型类的扩展,使用 C# 中的 partial 关键字。这允许您使用生成的 Linq to SQL 类的现有 ORM 功能,同时添加额外的验证功能。我假设这在实体框架和其他 ORM 中的工作方式相同。

    这里的 NerdDinner 教程中描述了视图模型: http://nerddinnerbook.s3.amazonaws.com/Part6.htm

    这里描述了验证过程:
    http://nerddinnerbook.s3.amazonaws.com/Part3.htm

    【讨论】:

    • 罗伯特-我喜欢这个答案。最近与 asp.net mvc 合作后,我发现验证在哪里做很困难,我认为你关于使用 ViewModel 的观点代表了非平凡应用程序的最佳方式......
    猜你喜欢
    • 2023-03-12
    • 2012-09-20
    • 1970-01-01
    • 2011-09-16
    • 1970-01-01
    • 1970-01-01
    • 2011-04-08
    • 1970-01-01
    • 2014-01-03
    相关资源
    最近更新 更多