【问题标题】:Should I use HiddenFor for all data entity properties I'm not editing?我应该对所有我没有编辑的数据实体属性使用 HiddenFor 吗?
【发布时间】:2012-11-05 09:40:05
【问题描述】:

我遇到了一个问题,即修改日期在我的编辑帖子中被重置为某个默认值。似乎模型绑定器忽略了不属于视图的属性。只要我添加了@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>
}

【问题讨论】:

    标签: asp.net-mvc-3


    【解决方案1】:

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

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

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

    你可以使用 session,虽然我不推荐它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-22
      • 1970-01-01
      • 1970-01-01
      • 2016-09-24
      • 1970-01-01
      相关资源
      最近更新 更多