Bra*_*ord 5 c# asp.net-mvc html-helper asp.net-mvc-2
这是一个错误还是一个功能?
为了简洁和易于复制,下面的所有代码都已经过简化,除了突出显示行为之外,实际上并没有做任何有用的事情.
我有一个包含名为ID的int的类:
public class FooterLink
{
public int ID { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
在我的控制器中,我有一个Edit actionresult,它带有一个名为'id'的参数:
public ActionResult Edit(int id)
{
return View(new FooterLink() { ID = 5 }); //notice that I am explicitly setting the ID value here.
}
Run Code Online (Sandbox Code Playgroud)
在我的索引视图中,我有一个指向"id"参数的编辑操作的链接:
<%= Html.ActionLink("Edit", "Edit", new { id = 1 })%>
Run Code Online (Sandbox Code Playgroud)
在我看来,我有几个文本框:
<%= Html.TextBox("ID", Model.ID)%>
<%= Html.TextBox("Blah", Model.ID) %>
Run Code Online (Sandbox Code Playgroud)
在HTML中呈现以下内容:
<input id="ID" name="ID" type="text" value="1">
<input id="Blah" name="Blah" type="text" value="5">
Run Code Online (Sandbox Code Playgroud)
请注意,id为"ID"的输入的值不是像我告诉它的那样从模型中得到的......而是来自提供给我的ActionResult的参数.此行为与Html.TextBoxFor,Html.Hidden,Html.HiddenFor等相同.
是什么赋予了?
编辑:我打算很久以前更新这个,但从来没有开始.发生这种情况的原因是因为ModelState将在方法中具有带有"id"参数值的"id"条目,并且MVC ViewEngine在填充Html助手而不是模型时首先检查ModelState. 为了解决这个问题,您只需在返回之前在控制器中添加以下行:
ModelState.Remove("id");
Run Code Online (Sandbox Code Playgroud)
现在<%= Html.TextBox("ID",Model.ID)%>将从Model获取值,而不是ModelState.问题解决了.
归档时间: |
|
查看次数: |
431 次 |
最近记录: |