A: 

Do you have an entry ViewData["Body"]? MVC will also attempt to bind a control to a ViewData item based on the name.

GalacticCowboy
There's no Body in ViewData. Thanks.
J. Pablo Fernández
+2  A: 

Check the View.ModelState property. Forms can grab values from there in certain circumstances.

Ray Vernagus
Yes, the problem was in the ModelState. Doing a ModelState.Clean() seems to fix the problem, but I'm not sure if I'm destroying the ModelState in the process.
J. Pablo Fernández
+3  A: 

The postback data is held in the ModelState. The built in HtmlHelper methods will look for values stored in the model state based on the name of the form element when rendering their content.

Steve Willcock
Oh! So the model state is clean when not using AJAX because I redirect. Adding a ModelState.Clear() when the method is success fixed it. Is that the way to go or am I destroying the ModelState?
J. Pablo Fernández
I'm pretty sure ModelState.Clear() is ok to use - I use it in a few places in my code. It will clear any validation messages from the ModelState as well as the pre-postback form values but as long as you are aware of that I think there's really no problem using it.
Steve Willcock