asp.net-mvc-3 – ASP.Net MVC 3 ViewModel数据注释
发布时间:2020-12-16 00:39:10 所属栏目:asp.Net 来源:网络整理
导读:我正在使用Entity Framework 4.1开发一个ASP.Net MVC 3 Web应用程序,对于使用Data Annotations进行表单验证,我感到有些困惑。 我总是返回一个ViewModel到一个视图,而不是传递实际的对象,因为我意识到这是不好的做法。例如: public class ViewModelTeam{
我正在使用Entity Framework 4.1开发一个ASP.Net MVC 3 Web应用程序,对于使用Data Annotations进行表单验证,我感到有些困惑。
我总是返回一个ViewModel到一个视图,而不是传递实际的对象,因为我意识到这是不好的做法。例如: public class ViewModelTeam { public Team Team { get; set; } } 我的视图可能会有这样的东西 @model UI.ViewModels.ViewModelTeam @Html.HiddenFor(model => model.Team.teamID) <div class="editor-label"> @Html.LabelFor(model => model.Team.description) </div> <div class="editor-field"> @Html.EditorFor(model => model.Team.description) @Html.ValidationMessageFor(model => model.Team.description) </div> 要验证此视图,我已经在这样的部分类中创建了数据注释 [MetadataType(typeof(TeamMetaData))] public partial class Team { public class TeamMetaData { [DisplayName("Team Name")] [Required(ErrorMessage = "Please enter a Team Name")] public object description { get; set; } 然后在我的创建控制器我有这个 [HttpPost] public ActionResult Create(Team team) { if (ModelState.IsValid) { //Add team and redirect } //Got this far then errors have happened //Add Model State Errors ViewModelTeam viewModel = new ViewModelTeam { Team = team }; return View(viewModel); } 现在,这样做不错,但是,我阅读的关于ViewModels和验证的内容越多,它似乎是应该被验证的ViewModel,因为在一天结束的时候,ViewModel被显示在视图中,而不是对象。 因此,我将ViewModel更改为如下所示 public class ViewModelListItem { public int teamID { get; set; } [DisplayName("Item Name")] [Required(ErrorMessage = "Please enter a Team Name")] public string description { get; set; } 而且我也改变了我的创建控制器 [HttpPost] public ActionResult Create(Team team) { if (ModelState.IsValid) { //Add team and redirect } //Got this far then errors have happened //Add Model State Errors ViewModelTeam viewModel = new ViewModelTeam(); viewModel.description = team.description; return View(viewModel); } 再次,这是有效的,但我只是得到感觉第二种方法是有点凌乱或没有效率的第一种方式这样做。 我有兴趣听别人的想法。谢谢你的帮助,对于这么长的职位我很抱歉。 解决方法
我总是使用视图模型和
AutoMapper来帮助我简化我的域和视图模型之间的映射。
查看型号: public class TeamViewModel { [DisplayName("Team Name")] [Required(ErrorMessage = "Please enter a Team Name")] public string Description { get; set; } } 然后一个常用的模式: public class TeamsController: Controller { public ActionResult Create() { var model = new TeamViewModel(); return View(model); } [HttpPost] public ActionResult Create(TeamViewModel model) { if (!ModelState.IsValid) { return View(model); } Team team = Mapper.Map<TeamViewModel,Team>(model); Repository.DoSomethingWithTeam(team); return RedirectToAction("Success"); } } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- 为什么Asp.net web项目在url中有垃圾值?
- asp.net-mvc – ASP.NET MVC – 仅经过身份验证的用户
- .Net Core技术研究-Span<T>和ValueTuple<T&
- 创建代码生成器可以很简单:如何通过T4模板生成代码?[上篇
- asp.net-mvc-3 – System.ComponentModel.DataAnnotations备
- asp.net-core – 基于策略的授权可以更加动态吗?
- asp.net – 有没有理由不接受数据库引擎优化顾问的建议?
- asp.net-mvc – 如何在保留控制器名称的同时分解ASP.NET MV
- asp.net – 使用ASPNet_Regiis加密自定义配置部分 – 你能做
- asp.net – 如何获取用户在MVC 5中注册的角色的ID
推荐文章
站长推荐
- asp.net’记住我’不再使用表单身份验证了
- asp.net TextBox中的值和文本属性(值被Text覆盖)
- asp.net-mvc – 如何在asp mvc中阻止访问Interne
- asp.net-core-mvc – ASP.NET MVC6 Beta8和Windo
- 怎样恢复能在asp.net中使用c#下载文件 – >最好的
- asp.net-mvc – 使旧会话Cookie无效 – ASP.Net标
- asp.net-mvc – ASP.NET MVC授权和使用模型类的权
- asp.net – ‘WebForm_DoPostBackWithOptions’在
- asp.net-mvc – 区域内的Asp.Net MVC IgnoreRout
- asp.net-mvc-3 – MVC3 – 为什么回发时导航属性
热点阅读