The model binder basically maintains Model State on a postback, which holds a value and binding errors for each of the Post back value submitted on the page that can be mapped to the model.In other words there's one Model State entry for each bound property of the model. Text Box(), it always binds values on a GET operation.
This is the behavior I was actually expecting previously.I added a plain text value to demonstrate the model value compared to what's rendered in the textbox.The relevant markup is the email address which needs to be manipulated via the model in the Controller code.You do want to get the POST values back into your input controls at all times, so that the data displayed on a form for the user matches what they typed.So if an error occurs, the error doesn't mysteriously disappear getting replaced either with a default value or some value that you changed on the model on your own. Still it is a little non-obvious because the way you create the UI elements with MVC, it certainly looks like your are binding to the model value: and so unless one understands a little bit about how the model binder works this is easy to trip up. Even though I'm telling the control which model value to bind to, that model value is only used initially on GET operations.But - clearing out all values might be a bit heavy handed.You might want to fix up one or two values in a model but rarely would you want the entire model to update from the model.If it's not I want to reset the email address back to the old value which exists in the database and was previously store.The obvious thing to do would be to modify the model.Now I don't know about you but this is not the behavior I expected - initially.This behavior effectively means that I cannot modify the contents of the textbox from the Controller code if using Html Helpers for binding.