我有一个编辑视图,显示我的一些字段,如下所示:
<table>
<tr>
<td style="width:40%; vertical-align:top">
<div class="editor-label">
@Html.LabelFor(model => model.CREATED_DATE)
</div>
<div class="editor-field">
@Html.DisplayFor(model => model.CREATED_DATE)
@Html.ValidationMessageFor(model => model.CREATED_DATE)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.LAST_MODIFIED_DATE)
</div>
<div class="editor-field">
@Html.DisplayFor(model => model.LAST_MODIFIED_DATE)
@Html.ValidationMessageFor(model => model.LAST_MODIFIED_DATE)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.STATUS)
</div>
<div class="editor-field">
@Html.DropDownListFor(model => model.STATUS, Model.Statuses)
@Html.ValidationMessageFor(model => model.STATUS)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.SEVERITY)
</div>
<div class="editor-field">
@Html.DropDownListFor(model => model.SEVERITY, Model.Severities)
@Html.ValidationMessageFor(model => model.SEVERITY)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.PRIORITY)
</div>
<div id="priorityDiv" class="editor-field">
@Html.EditorFor(model => model.PRIORITY)
@Html.ValidationMessageFor(model => model.PRIORITY)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.DESCRIPTION)
</div>
<div id="descriptionDiv" class="editor-field">
@Html.EditorFor(model => model.DESCRIPTION)
@Html.ValidationMessageFor(model => model.DESCRIPTION)
</div>
</td>
</tr>
</table>
本质上,我希望用户能够编辑除顶部两个以外的任何字段,CREATED_DATE和LAST_MODIFIED_DATE。但是,当我点击提交按钮时,两个日期字段将返回null。我的控制器代码如下。
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Edit(Alert alert)
{
if (ModelState.IsValid)
{
alert.LAST_MODIFIED_DATE = DateTime.Now;
db.Entry(alert).State = EntityState.Modified;
db.SaveChanges();
return RedirectToAction("Index");
}
return View(alert);
}
有没有办法阻止用户编辑视图中的字段而不将字段的内容作为null返回给控制器?
答案 0 :(得分:3)
将它们添加到表单内隐藏字段的视图中:
<div class="editor-field">
@Html.DisplayFor(model => model.CREATED_DATE)
@Html.HiddenFor(model => model.CREATED_DATE)
</div>
<div class="editor-field">
@Html.DisplayFor(model => model.LAST_MODIFIED_DATE)
@Html.HiddenFor(model => model.LAST_MODIFIED_DATE)
</div>
这会让他们回复您的Edit
方法而无需用户编辑它们。您还可以删除此字段的ValidationMessages
,因为它们无法编辑,因此无需显示验证消息。
编辑: 正如@JLRishe指出的那样,这将使用户能够使用他们的浏览器调试工具来编辑值。
另一种解决方案可能是创建特定于视图的模型,并仅将要调整的值映射到数据库对象。有关此处的更多信息:Real example of TryUpdateModel, ASP .NET MVC 3