我是否应该将HiddenFor用于我不编辑的所有数据实体属性?

时间:2012-11-05 09:40:05

标签: asp.net-mvc-3

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

我原本以为所有属性值都会在此过程中持续存在,但事实并非如此。我正在为我的模型使用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>
}

1 个答案:

答案 0 :(得分:3)

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

这比ASP.Net的优势在于你可以完全控制在HTTP中传递的内容,因此不再需要更多巨大的ViewState,其中90%可能永远不会使用。通过这种方式,您可以在ASP.Net中以前所未有的方式调整通过线路发送的数据。

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

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