asp.net-mvc – MVC架构 – 重新使用相同的viewmodel进行读取和
假设我们有以下(过于简单)的场景:
我们有一个屏幕来查看人员详细信息和一个屏幕来编辑人员详细信息. 屏幕显示人员详细信息具有以下字段(仅显示): 名字 屏幕编辑人员详细信息显示有以下字段(在输入控件中): ID(隐藏) 假设我们的显示视图模型如下所示: public class DisplayPersonViewModel { public string FirstName { get; set; } public string LastName { get; set; } public string Bio { get; set; } } 我们的编辑视图模型如下所示: public class EditPersonViewModel { [Required] public int ID { get; set; } [Required] [StringLength(20)] public string FirstName { get; set; } [Required] [StringLength(20)] public string LastName { get; set; } [Required] public string Bio { get; set; } } 2,呃之间差别不大?编辑模型在属性上有一个额外字段(ID)和一些属性.现在,如果我们要像这样结合2: public class DisplayPersonViewModel { [Required] [StringLength(20)] public string FirstName { get; set; } [Required] [StringLength(20)] public string LastName { get; set; } [Required] public string Bio { get; set; } } public class EditPersonViewModel : DisplayPersonViewModel { [Required] public int ID { get; set; } } 这当然更干,因为我们没有要维护的重复字段,但现在我们在显示视图模型上有无关的信息(属性).无论如何,我更倾向于第二种方法,因为我们的一些屏幕有超过25个字段! (……那是我无法控制的,所以请不要竖起来:) :)但是,我只是想听听意见,以便更好地了解可能是“最佳实践”. 解决方法
是的,第二种方法对我来说似乎没问题.不用担心,除了你肚子里的这种痒感,告诉你为什么你在装修一个带有验证属性的显示视图模型.但是如果你可以忍受它,那么与复制视图模型相比,它确实是首选.
不幸的是,我个人无法忍受这种感觉,这就是为什么我使用FluentValidation.NET来定义我的验证规则而不是数据注释.它允许我将这些规则与我的视图模型分开,然后我不担心用验证规则污染所谓的显示视图模型.所以我将以与2个视图模型相同的方式定义,EditPersonViewModel将从DisplayPersonViewModel派生,然后在单独的类中为EditPersonViewModel定义我的EditPersonViewModelValidator. 哦和旁注:没有必要使用[Required]属性装饰不可为空的类型.所有非可空类型都是其基本性质所必需的.所以代替: [Required] public int ID { get; set; } 你应该只有: public int ID { get; set; } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- ASP.NET Core 发布至Linux生产环境 Ubuntu 系统
- asp.net – <#=#>是什么意思
- asp.net – AngularJs 2与ASP.NET 4.5.1
- asp.net-mvc – ASP.NET MVC帖子模型的示例?
- asp.net MVC – ValidationSummary不显示
- asp.net-mvc – ASP.NET MVC – 数据库的替代方案
- 是否可以在ASP.NET中使用MSChart导出/保存工具提示?
- ASP.NET Core - 源码解析 - Program.cs (一)
- ASP.NET-MVC 2 RC最佳功能
- asp.net – 如何使用HTML5电子邮件输入类型与服务器端.NET
- asp.net-mvc – 属性的自定义模型binder
- asp.net – IIS 7.0和IIS 7.5之间有什么区别?
- asp.net-mvc-5 – 在GenerateUserIdentityAsync方
- asp.net – 如何为ValidateAntiForgeryToken选择
- asp.net-mvc – 未找到与请求URI匹配的HTTP资源
- asp.net-mvc – MVC .NET模型即时绑定到数组
- asp.net-mvc – ASP.NET MVC 3确定会话状态(新的
- asp.net – 使用ViewComponent的Ajax
- 无法通过IP地址连接ASP.NET开发服务器(VS2010)
- .net – SqlConnection的Dispose方法是否会干扰连