TextBoxFor is not refreshing after postback

asp.net-mvc, c#

Solution

I believe you must call `ModelState.Clear()` inside your `[HttpPost]` action, before you set the new value.

According to this answer, which has a very good explanation: How to update the textbox value @Html.TextBoxFor(m => m.MvcGridModel.Rows[j].Id)

See this too: ASP.NET MVC 3 Ajax.BeginForm and Html.TextBoxFor does not reflect changes done on the server Although it seems you're not using `Ajax.BeginForm`, the behavior is the same.

Including an example as suggested by @Scheien:

[HttpPost]
public ActionResult Index(TestModel model)
{
    ModelState.Clear(); 
    model.Name = "After post";
    return View("Index", model);
}

Problem

I'm probably making a stupid mistake somewhere. I would appreciate your help in the following. I have sample MVC3 application with a single editable field that is displayed to user with TextBoxFor method. In the Index(POST) action I change the value but it still remains the same. What am I doing wrong? My code: Model: ``` public class TestModel { public string Name { get; set; } } ``` View: ``` using (Html.BeginForm()) { @Html.TextBoxFor(m => m.Name) <input type="submit" /> } ``` Controller: ``` public ActionResult Index() { return View("Index", new TestModel() { Name = "Before post" }); } [HttpPost] public ActionResult Index(TestModel model) { model.Name = "After post"; return View("Index", model); } ``` If I replace TextBoxFor with TextBox or DisplayTextFor then it works correctly.

Original source

Related problems