如何保持从View,Controller到服务的完整数据完整性

时间:2013-07-02 20:12:27

标签: asp.net asp.net-mvc entity-framework ef-code-first

我正在使用Entity Framework Code-First方法开展项目。我们有一个上下文类,服务,存储库和接口层。我们希望能够在特定实体的服务类中保持验证和任何类型的对象映射。但是,我们并不喜欢搞乱键值对列表,我们觉得将整个表单集合传递给服务会很麻烦。并且,使用从View返回Model会导致字符串条目转换为0以获取数字属性...暂停任何正确的验证。我们知道实体验证会阻止表单甚至被提交,但是如果您要在后端使用验证,我们希望有一层“安全性”。

我们的谷歌即将结束!我们的力量毫无用处。

我们想知道是否有一种漂亮而干净的方法可以将数据从Form集合从控制器传递到Service方法,而无需使用键值对列表,传递集合本身或映射模型?

1 个答案:

答案 0 :(得分:0)

如果你想在MVC方面保留类型安全的模型,我认为这是正确的做法,我认为你最好的选择是在将数据发送到你的服务之前在MVC世界中做一些初步验证。您可以查看您的模型是否有效,并通过以下方式获取所有基本错误:

var errors = ModelState.Values.SelectMany(v => v.Errors);

如果此集合包含任何项目,则它将包含显示模型映射出错位置的错误。如果您的客户端验证工作正常,那么这应该永远不会发生,但是如果他们禁用客户端验证,您仍然可以使用它。如果您无法从帖子中生成有效的模型,那么将其发送到Web服务也是一种浪费,所以不要打扰。这意味着用户搞砸了大而且不值得完整的帖子验证。所以在那里阻止它们。

如果模型有效(该集合中没有错误或ModelState.IsValid),那么您知道至少帖子中有适当的数据类型,您可以将模型发送到您的服务中业务验证,知道这些值都已正确发布。