asp.Net MVC视图模型在帖子上是空的
发布时间:2020-05-24 22:48:08 所属栏目:asp.Net 来源:互联网
导读:我有一个复杂的视图模型,我将其传递给创建视图.当我在页面上输入数据并发布时,模型为空.子对象和“测试”字段中的字段都是空的.为什么? public class ContactIncident{ [Key] public int Id { get; set; } [DataType(DataType.MultilineText)] public string
|
我有一个复杂的视图模型,我将其传递给创建视图.当我在页面上输入数据并发布时,模型为空.子对象和“测试”字段中的字段都是空的.为什么? 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 – 在html.actionlink上单击转到上一页
- asp.net-mvc – ASP.NET MVC 6中的基本视图页面
- 在ASP.NET中如何识别/处理404异常?
- asp.net-mvc – 如何在backbone.js中保存模型集合?
- asp.net-mvc-3 – ASP.NET AJAX.BeginForm发送多个请求
- asp.net-mvc – 如何在MVC WebGrid中显示行号
- 是否有必要创建ASP.NET 4.0 SQL会话状态数据库,与现有的ASP
- asp.net-mvc – MVC 3 Webgrid – 你如何隐藏不想显示的列?
- 如何从ASP.NET中的Web请求返回pdf?
- asp.net-mvc – 使用Automapper更新现有的实体POCO
