【发布时间】:2011-03-29 04:40:12
【问题描述】:
这是错误还是功能?
为了简洁和易于复制,下面的所有代码都进行了简化,除了突出显示行为之外实际上并没有做任何有用的事情。
我有一个包含名为 ID 的 int 的类:
public class FooterLink
{
public int ID { get; set; }
}
在我的控制器中,我有一个 Edit actionresult,它带有一个名为“id”的参数:
public ActionResult Edit(int id)
{
return View(new FooterLink() { ID = 5 }); //notice that I am explicitly setting the ID value here.
}
在我的索引视图中,我有一个指向指定“id”参数的编辑操作的链接:
<%= Html.ActionLink("Edit", "Edit", new { id = 1 })%>
在我看来,我有几个文本框:
<%= Html.TextBox("ID", Model.ID)%>
<%= Html.TextBox("Blah", Model.ID) %>
在 HTML 中呈现以下内容:
<input id="ID" name="ID" type="text" value="1">
<input id="Blah" name="Blah" type="text" value="5">
请注意,ID 为“ID”的输入不是像我告诉它的那样从模型中获取其值……而是从提供给我的 ActionResult 的参数中获取的。 此行为与 Html.TextBoxFor、Html.Hidden、Html.HiddenFor 等相同。
什么给了?
编辑:我很久以前就打算更新它,但一直没有解决。发生这种情况的原因是因为 ModelState 将在方法中有一个带有“id”参数值的“id”条目,并且 MVC ViewEngine 在填充 Html 帮助程序而不是 Model 时首先检查 ModelState。 为了解决这个问题,您只需在控制器中添加以下行,就在 return 之前:
ModelState.Remove("id");
现在 将从模型而不是模型状态中获取值。问题解决了。
【问题讨论】:
标签: c# asp.net-mvc asp.net-mvc-2 html-helper