aspnetmvc模型已更新但不更新控件

Los*_*nos 1 asp.net-mvc

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也是如此.)

Dar*_*rov 6

这是正常的,它是HTML帮助程序的工作方式:它们首先在模型状态中查找,然后在绑定值时在模型中查找.因此,如果您打算在POST操作中修改某些属性,则需要先将其从模型状态中删除,否则您将始终获得旧值:

[HttpPost]
public ActionResult Index(MyModel myModel)
{
    ModelState.Remove("MyNumber");
    myModel.MyNumber += " 2222";
    return View(myModel);
}
Run Code Online (Sandbox Code Playgroud)

  • 使用ModelState.Clear()清除所有属性. (2认同)