2010-11-01 58 views

回答

4

验证应在视图模型来完成最低,因为这是你得到什么的操作参数,包含用户输入。你也可以在模型上进行验证。

1

我的答案将是ViewModel,因为模型可以改变(例如从使用Linq2SQL到EF)。这样,当你插入另一个模型时,你仍然有你的验证完好无损。

1

我个人有我的验证2个地方使用DataAnnotations。我的模型没有完全传递给我的观点。我为我的视图分开模型,并将视图模型中的数据转换为模型。这样,我可以在我的视图模型中放入任何我想要的东西,并省去我不想处理的部分。

但是,我的推理是我有一个Windows应用程序和一个使用相同模型的Web应用程序。这样,同一组验证规则就可以管理所有应用程序的模型,而且如果需要,我的视图模型可能会有稍微不同的规则。当然,这会造成“逻辑重复” - 也就是验证逻辑。

这样我就不必重建每一次回到服务器的页面上都没有使用的数据,或者将它放在隐藏字段中,并且扩大了我的页面大小。

0

该模型应该执行验证,以确保其状态不会失效;该验证绝对属于该模型。例如,书籍类必须保证其标题必须在1到50个字符之间,其ID必须> = 0等。

业务规则属于别处(如果您只有模型视图和控制器层)。这可能是像用户不能添加超过3本书,如果他们的电子邮件没有验证。

视图中的验证应限制为解析用户输入的无效数据:反xss,sql注入,超出范围。 etc

1

您应该在ViewModel中放入特定于UI的验证,以及任何与模型中的业务流程或数据库验证相关的验证。这些可能会重叠。

+0

感谢您的评论,所以我会使用数据注释模型和viewmodel? (属性) – Martin 2010-11-03 15:25:22