我遇到了一个问题,即在我的编辑帖子中将修改日期重置为某个默认值。似乎模型绑定器忽略不属于视图的属性。只要我添加了@ 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>
}
答案 0 :(得分:3)
MVC仅发布表单中的元素。它使用标准的HTTP post方法,不同于在ViewState中保存值的ASP.Net(这有效地保存在隐藏元素的形式中,但你从未真正看到它)。所以是的,如果你想要一个值持久存在,你必须将它存储在表单中。
这比ASP.Net的优势在于你可以完全控制在HTTP中传递的内容,因此不再需要更多巨大的ViewState,其中90%可能永远不会使用。通过这种方式,您可以在ASP.Net中以前所未有的方式调整通过线路发送的数据。
没有办法确保填充隐藏的元素。你需要自己做。同样,这是因为表单是无状态的,就像一个合适的网站应该是!
你可以使用会话,但我不推荐它。