0

ASP.NET MVC Music Store Tutorial by Jon Galloway Microsofthttp://mvcmusicstore.codeplex.com关注

在建立这个虚构的音乐商店时,我们Album.cs以这些代码行作为模型。

public class Album
{
    [Required(ErrorMessage = "An Album Title is required")]
    [StringLength(160)]
    public string Title { get; set; }
    //.......More code follows

我感到困惑的是,为什么这里的验证是由Required模型中的属性而不是控制器来完成的?控制器不应该进行验证吗?还是在模型中进行验证的标准做法......据说教程来自微软?

谢谢

4

3 回答 3

4

我感到困惑的是,为什么这里的验证是由模型中的 Required 属性而不是控制器来完成的

实际上这就是域模型,它应该对它进行域验证,以确保它保持一致。另一方面,您应该将视图模型暴露给执行视图特定验证的视图。如果这个领域模型永远不会在这个应用程序之外被重用,你只能依靠视图模型验证。

例如,您会看到许多将视图特定数据注释属性放在域模型上的错误示例,例如[DisplayFormat][Display]。所有这些例子都说明了糟糕的设计,其中域模型被用作视图模型。

于 2013-05-18T11:01:34.427 回答
0

您在模型中使用DataAnnotations,该模型声明Title必须先填写该字段,然后才能将其发送回服务器。在控制器中,您还可以检查if ModelState.IsValid但是DataAnnotations在模型级别添加是实现数据验证的正确方法。

于 2013-05-18T11:00:55.703 回答
0

我们一般使用微软企业库的验证块在控制器中进行验证。这使我们能够通过修改配置文件轻松添加或删除验证。

于 2013-05-21T18:09:46.217 回答