在post request asp.net mvc中更改模型属性

cos*_*set 14 .net c# asp.net asp.net-mvc asp.net-mvc-3

我有一个问题.

这是一个简短的例子.这是模特.

    public class MyModel
    {
         string Title{get;set;}
    }
Run Code Online (Sandbox Code Playgroud)

在视图中我写

@Html.TextBoxFor(model => model.Title)
Run Code Online (Sandbox Code Playgroud)

这是控制器.

    public ActionResult EditNews(int id)
    {
        var model = new MyModel;
        MyModel.Title = "SomeTitle"

        return View("News/Edit", model);
    }
    //for post
    [HttpPost]
    public ActionResult EditNews(MyModel model)
    {
        //There is  problem.When I do postback and
        // change Title in this place,Title  doesn't change in view textbox
        //Only when I reload page it change.
        model.Title = "NEWTITLE"

        return View("News/Edit", model);
    }
Run Code Online (Sandbox Code Playgroud)

mat*_*mmo 26

它不会改变,因为默认情况下(许多人认为这是一个错误)MVC将忽略HttpPost您在返回相同View时对模型所做的更改.相反,它会查找ModelState最初提供给视图的值.

为了防止这种情况,您需要清除ModelState,您可以HttpPost通过执行以下操作来执行此操作:

ModelState.Clear();
Run Code Online (Sandbox Code Playgroud)

  • 另外,请参阅以下答案:http://stackoverflow.com/a/4896336/1869660如果您不想清除整个`ModelState`,则可以调用`ModelState.Remove("Title")`. (9认同)