asp.net – 我仍然犹豫使用ViewModels而不是View for Model
我使用Automapper或手动映射,它不起作用.
ReleaseViewModel的所有数据必须首先在Release中,因为它随数据访问层填充. 90%的模特都是这样的.为什么重复一切的开销? KISS原理和过度工程怎么样? 当然,每个工具都适合其适当的任务,但我经常读到,在asp.net mvc中不使用ViewModel是NO-GO. 在哪里划线?当我们从模型中区分到50%,75%或99%时,我应该使用ViewModels吗? 我有一个模型发布: public class Release { public int Id { get; set; } public string Name { get; set; } public string Author { get; set; } public DateTime CreatedAt { get; set; } public int FailedTestsCount { get; set; } public int SucceededTestsCount { get; set; } public int SumTestsCount { get { return SucceededTestsCount + FailedTestsCount; } } public int SumTestingTime { get; set; } } 一个viewmodel ReleaseViewModel: public class ReleaseViewModel { [HiddenInput(DisplayValue = false)] public int Id { get; set; } [Required(ErrorMessage = "Name must not be empty.")] [StringLength(30,ErrorMessage = "Enter max. 30 chars for a name.")] [Remote("ReleaseExists","Release",ErrorMessage = "This name already exists.")] public string Name { get; set; } public string Author { get; set; } public DateTime CreatedAt { get; set; } public int FailedTestsCount { get; set; } public int SucceededTestsCount { get; set; } public int SumTestsCount { get { return SucceededTestsCount + FailedTestsCount; } } public int SumTestingTime { get; set; } } 解决方法
ViewModel适用于VIEW.大部分时间它与您的实体模型类似.但不总是.
看看你的例子.在ViewModel中,您具有“远程属性”和一些“验证”属性.因此,您可以添加此远程名称检查,以便为用户提供更好的用户体验.它特定于View. 您需要Viewmodel的另一个场景是用于涉及多个模型的屏幕.例如:您有一个用户实体和一个项目实体,并且您想要提供一个可以将项目添加到用户的屏幕.所以在这种情况下,您可以创建一个viewmodel来处理它 public class ProjectToUserVM { public int UserId { set;get;} public string UserName { set;get;} // i want to display only name of user! public int ProjectID { set;get;} public IEnumerable<SelectListItem> Projects { set;get} } 不要将ViewModel用于所有模型实体.当您的VIEW确实需要时创建它.我在一些视图中直接使用我的Model实体对象,而不创建一个viewmodel,因为它们完全相同.例如:国家/州/市(查找表数据.无添加/编辑) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- asp.net-mvc – auth ASP.NET MVC REST API的最佳选择是什么
- asp.net – 哪种模式最匹配场景详细,是不是很好的做法?
- ASP.NET;几个会话变量或“容器对象”?
- asp.net – 如何避免UpdatePanel在AutoPostBack上滚动?
- 是否可以优化ASP.NET WebForms以便像ASP.NET MVC一样快速执
- ASP.net应用程序崩溃 – 无法加载文件或程序集“Microsoft.
- asp.net-mvc – ASP.NET MVC视图或URL应该有多少级别?
- asp.net – 什么项目层应该屏幕DTO的生活?
- asp.net – RPC_E_SERVERFAULT
- Asp.Net Core 2.0 多角色权限认证