asp.Net MVC视图模型在帖子上是空的
发布时间:2020-12-15 19:48:31 所属栏目:asp.Net 来源:网络整理
导读:我有一个复杂的视图模型,我将其传递给创建视图.当我在页面上输入数据并发布时,模型为空.子对象和“测试”字段中的字段都是空的.为什么? public class ContactIncident{ [Key] public int Id { get; set; } [DataType(DataType.MultilineText)] public strin
我有一个复杂的视图模型,我将其传递给创建视图.当我在页面上输入数据并发布时,模型为空.子对象和“测试”字段中的字段都是空的.为什么?
public class ContactIncident { [Key] public int Id { get; set; } [DataType(DataType.MultilineText)] public string Description { get; set; } [Display(Name = "Incident Date")] [DataType(DataType.Date)] public DateTime? IncidentDateTime { get; set; } [Display(Name = "Follow Up Date")] [DisplayFormat(ApplyFormatInEditMode = true,DataFormatString = "{0:dd/MM/yyyy}")] [DataType(DataType.Date)] public DateTime? FollowUpDate { get; set; } } public class IncidentManager { public ContactIncident Incident { get; set; } public string Test { get; set; } } public ActionResult Create(int? id) { IncidentManager im = new IncidentManager(); ContactIncident ci = new ContactIncident(); ci.IncidentDateTime = DateTime.Now; ci.FollowUpDate = DateTime.Now.AddDays(14); im.Incident = ci; return View(im); } [HttpPost] [ValidateAntiForgeryToken] public ActionResult Create(IncidentManager im) { if (ModelState.IsValid) { ContactIncident ci = new ContactIncident(); ci.IncidentDateTime = incident.Incident.IncidentDateTime; ci.Description = im.Incident.Description; return RedirectToAction("Index"); } return View(incident); } 视图: @model MyApp.Web.ViewModels.IncidentManager @{ ViewBag.Title = "Edit Incident"; } <h4>@ViewBag.Title</h4> @using (Html.BeginForm()) { @Html.AntiForgeryToken() <div class="form-horizontal well"> @Html.ValidationSummary(true) @Html.EditorFor(model=>model.Test) <div class="row"> <div class="col-md-2"> @Html.LabelFor(model => model.Incident.IncidentDateTime) </div> <div class="col-md-2"> @Html.DisplayFor(model => model.Incident.IncidentDateTime) </div> </div> <div class="row"> <div class="col-md-2"> @Html.LabelFor(model => model.Incident.Description) </div> <div class="col-md-10"> @Html.EditorFor(model => model.Incident.Description,new { htmlAttributes = new { @class = "form-control",rows = "5" },}) </div> <div class="col-md-2"> @Html.LabelFor(model => model.Incident.FollowUpDate) </div> <div class="col-md-2"> @Html.EditorFor(model => model.Incident.FollowUpDate,new { htmlAttributes = new { @class = "form-control"},}) </div> </div> </div> <div class="form-group"> <div class="col-md-offset-2 col-md-10"> <input type="submit" value="Save" class="btn btn-default" /> </div> </div> } 解决方法
问题是如果使用不同的参数名称,DefaultModelBinder将无法正确映射嵌套模型.您必须使用与ViewModel名称相同的参数名称.
public ActionResult Create(IncidentManager incidentManager) 作为一般做法,始终使用模型的名称作为参数名称以避免映射问题. 更新: DefaultModelBinder使用“基于约定”的映射. IncidentManager.Incident = incidentManager.Incident (will map) IncidentManager.Incident = im.Incident (won't map because 'im' != 'incidentManager') (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- asp.net-mvc – 使用实体框架4.1创建复合主键
- asp.net-mvc-3 – 具有MVC3的多用户应用程序,ASP.NET成员资
- asp.net – 视图状态中存储的项目的生命周期是多少?
- asp.net – IIS 8.5提供旧文件
- ASP.Net MVC MvcBuildViews大大增加了编译时间
- asp.net – 服务器端/客户端或两者用户输入验证
- asp.net-mvc – 使用Nuget打包源代码
- asp.net – 未知的服务器标签’ajaxToolkit:CalendarExten
- asp.net mvc 3 c#post变量数组
- asp.net – 什么是Kestrel(vs IIS/Express)
推荐文章
站长推荐
热点阅读