hejdig.
在Aspnetmvc2中,我有一个模型对象,我发送到View.视图中的控件未使用该值更新.为什么?我陷入了什么明显的陷阱?
风景:
<%:Html.TextBox(
"MyNumber",
null == Model ? "1111" : Model.MyNumber ) %>
<%:Model.MyNumber%>
Run Code Online (Sandbox Code Playgroud)
首先通过Get获取.文本框中的"1111"值手动更新为"2222".我们将表单发布到控制器,控制器将"2222"附加到Model对象并再次将其发送到视图.
控制者:
[HttpGet]
public ActionResult Index()
{
return View();
}
[HttpPost]
public ActionResult Index( MyModel myModel)
{
myModel.MyNumber += " 2222";
return View(myModel);
}
Run Code Online (Sandbox Code Playgroud)
总而言之,我们得到的输出如下:
<input id="MyNumber" type="text" value="1111">
1111 2222
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,控件不使用Model的属性,而是回退到Aspnetmvc中不存在的w视图状态.
(Razor也是如此.)
这是正常的,它是HTML帮助程序的工作方式:它们首先在模型状态中查找,然后在绑定值时在模型中查找.因此,如果您打算在POST操作中修改某些属性,则需要先将其从模型状态中删除,否则您将始终获得旧值:
[HttpPost]
public ActionResult Index(MyModel myModel)
{
ModelState.Remove("MyNumber");
myModel.MyNumber += " 2222";
return View(myModel);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1949 次 |
| 最近记录: |