我正在使用MVC 2进行项目,我遇到了一个视图问题。在控制器中我有代码:
return View(calendarDay);
如果我调试此行并检查calendarDay,它会告诉我calendarDay.Id属性等于2。 在视图中我有一些像这样的代码:
<%: Html.HiddenFor(model => model.Id) %>
但是,当将视图绑定到具有Id属性= 2的calendarDay后显示视图时,我会在生成的HTML上得到此信息:
<input id="Id" name="Id" type="hidden" value="1">
值为1,所以当我执行TryUpdateModel(calendarDay)时,它将Id属性设置为1而不是2,当我转到存储库以使对象删除它时,它会崩溃,因为它找到了错误的。 谁知道我可能做错了什么?
答案 0 :(得分:1)
我怀疑您正在尝试将控制器操作中的POSTed值(即1)修改为2.这是不可能的,因为这是所有HTML帮助程序的工作原理并且它是设计的:它们将首先查看POSTed绑定时的值以及模型之后的值。因此HiddenFor
助手会忽略模型的ID并使用已发布的ID。
作为一种解决方法,您可以:
<input type="hidden" name="Id" value="<%: Model.Id %>" />
正如@jfar在评论部分所建议的另一种解决方法是在返回视图之前清除帖子操作中的模型状态:
MoselState.Clear();
答案 1 :(得分:0)
似乎问题是视图使用的是控制器中的id而不是模型中的id。我刚刚更改了参数名称,现在工作正常。