MVC 4:编辑实体时,某些字段返回null

时间:2014-02-06 15:42:17

标签: c# asp.net asp.net-mvc-4

我有一个编辑视图,显示我的一些字段,如下所示:

<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返回给控制器?

1 个答案:

答案 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