【问题标题】:MVC 4: Some fields return as null when editing entityMVC 4:编辑实体时某些字段返回为空
【发布时间】:2014-02-06 15:42:17
【问题描述】:

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

<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 之外的任何字段。但是,当我点击提交按钮时,两个日期字段返回为空。我的控制器代码如下。

[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);
}

有没有办法防止用户编辑视图中的字段,而字段的内容没有作为空返回给控制器?

【问题讨论】:

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


    【解决方案1】:

    将它们添加到表单内隐藏字段中的视图中:

    <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

    【讨论】:

    • 如果他们在浏览器调试工具中打开页面,从技术上讲,他们可以编辑它们。
    • 没想到,他们可以做到。
    猜你喜欢
    • 1970-01-01
    • 2013-07-07
    • 2014-11-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-14
    • 1970-01-01
    相关资源
    最近更新 更多