1

我遇到了一个问题,即修改日期在我的编辑帖子中被重置为某个默认值。似乎模型绑定器忽略了不属于视图的属性。一旦我添加了 @Html.HiddenFor(m => m.ModifiedDate) ,原始值就会包含在传递给 post 操作的对象中。

我原以为所有属性值都会在此过程中持续存在,但事实并非如此。我正在为我的模型使用 sql 数据库,在当前上下文中,某些字段不可用于编辑。这是否意味着我应该对所有不可编辑的属性使用 HiddenFor 以确保原始数据的完整性?

如果是这样,有没有办法确保自动包含添加的新字段?

post方法的一个例子

    [HttpPost]
    public ActionResult Edit(Customer customer)
    {
        //Some code here
    }

和视图

@model MyApp.Models.Customer
@{
  ViewBag.Title = "Edit";
}
<h2>
    Edit</h2>
@using (Html.BeginForm())
{
 <fieldset>
    @Html.HiddenFor(m => m.ModifiedData)
    @*Some other fields*@
 </fieldset>
    <p>
        <input type="submit" value="Save" />
    </p>
}
4

1 回答 1

3

MVC 仅在表单中发布元素。它使用标准的 HTTP post 方法,不像 ASP.Net 在 ViewState 中保存值(这在表单中也有效地保存为隐藏元素,但您从未真正看到它)。所以是的,如果你想让一个值保持不变,你必须将它存储在表单中。

与 ASP.Net 相比,它的优势在于您可以完全控制在 HTTP 中来回传递的内容,因此不会再到处传递巨大的 ViewState,其中 90% 您可能从未使用过。通过这种方式,您可以调整通过网络发送的数据,这是在 ASP.Net 中无法做到的。

不,没有办法确保隐藏元素被填充。你需要自己做这件事。同样,这是因为表单是无状态的,就像一个适当的网站一样!

您可以使用会话,但我不推荐它。

于 2012-11-05T09:48:22.413 回答