asp.net-mvc-4 – Asp.NET MVC – DataAnnotations和ModelState.
我正在从
Pro ASP.NET MVC 4这本书中学习ASP.NET MVC(顺便说一句,我喜欢这本书).
我还在开头的章节中,它向我展示了System.ComponentModel.DataAnnotations命名空间属性,如何使用这些注释来填充我的模型类,然后如何使用它们来检查模型是否有效(ModelState.IsValid in the控制器). 例如: public class GuestResponse { [Required(ErrorMessage = "Please enter your name"] public string Name { get; set; } } ... public ViewResult RsvpForm(GuestResponse guestResponse) { if(ModelState.IsValid) { return View("Thanks",guestResponse); } } 有几件事让我感到不安. >为什么我想要在我的域模型中散布一堆属性?我喜欢我的域模型纯粹而且没有任何特定于实现的东西,并且任何真实世界模型都太复杂而不能像这样使用声明性验证. 任何建议,保证或验证这些想法将不胜感激. 解决方法
以下是我对你问题的回答:
你绝对不希望这样.您想要的是拥有专为视图目的而设计的视图模型.这个视图模型将包含数据注释,而不是您的域模型.然后,控制器将在域模型和视图模型之间进行映射,并将视图模型传递给视图.将视图模型视为一个或多个域模型的投影.为了简化您的域和视图模型之间的映射,您可以签出
完全同意你的看法.这就是为什么你应该有一个专门为视图目的而设计的视图模型类的原因.
我再次同意你的看法.声明性验证(例如你开箱即用的数据注释)对于Hello World类型的应用程序非常有用,但是一旦你开始用复杂的验证规则编写真实世界的应用程序,你很快就会意识到声明式方法根本不会削减芥末.正是出于这个原因,我使用了 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- asp.net core 实现支持多语言
- asp.net – 是否可以根据用户角色隐藏/显示Kendo网格列?
- 从ASP.NET服务器控件动态添加CSS文件
- asp.net – __ doPostBack()之后的回调?
- asp.net-mvc-3 – 将开源CMS框架集成到现有的MVC3 / MVC4站
- asp.net-mvc – 如何在Windows Azure网站(asp.net mvc4)上更
- ASP.NET – 在postBack之后将屏幕滚动到之前的位置
- asp.net-mvc – MVC4 Bootstrap示例中基于角色的导航显示
- asp.net-mvc – 用于移动设备的displaymode,带有桌面视图,适
- asp.net-mvc-3 – 如何在WebGrid中隐藏列?