asp.net-mvc-3 – ASP.Net MVC 3 ViewModel数据注释
发布时间:2020-05-23 16:03:48 所属栏目: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进行表单验证,我感到有些困惑。
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-mvc – 启用SSL时,IIS默认为HTTPS的端口44300
- asp-classic – 从Classic ASP执行存储过程
- asp.net-mvc-3 – 可以用“@:@”修复的MVC4剃刀的可能的突
- 为什么从ASP.NET页面下载时,.docx文件被损坏?
- asp.net – Session Timeout .NET
- asp.net – 可接受的安全性:使用Paramatised SQL和HTML编码
- asp.net – Internet Explorer的操作中止和延迟问题
- 如何创建使用asp:ListItem列表作为子控件的ASP.NET用户/服
- 根据ASP.NET中的角色设置auth cookie超时长度
- asp.net – 通过javascript禁止文本框中的退格
推荐文章
站长推荐
- asp.net – MVC5中IdentityDbContext和IdentityD
- asp.net – LINQ查询,其中boolean值为true或fals
- asp.net – 如何创建一个.ICS文件与多个VEVENT导
- asp.net-mvc-3 – SignalR多个聊天室
- asp.net-mvc – 谁设置HttpContext.User.Identit
- asp.net – 这些Web Essentials选项有什么作用?
- 使用log4net和ASP.NET跟踪会话变量
- asp.net-mvc – 在Umbraco 6.1.1 MVC 4中,如何使
- asp.net-core – 如何在ASP.NET Core 2.0中实现m
- asp.net-mvc – 使用ASP.NET MVC导出数据到Excel
热点阅读
