Это нормальное поведение HTML-помощников, и оно разработано. Сначала они смотрят на значения, содержащиеся в ModelState, а затем в реальной модели. Если вы намереваетесь изменить некоторые значения модели в действии POST, вам необходимо сначала удалить их из состояния модели:
Например:
[HttpPost]
public virtual ActionResult Create(Create route)
{
ModelState.Remove("SomeProperty");
route.SomeProperty = "some new value";
return View(route);
}
Если вы намереваетесь полностью изменить все, как в вашем примере, вы можете полностью очистить состояние модели:
[HttpPost]
public virtual ActionResult Create(Create route)
{
ModelState.Clear();
return Create();
}
Другая возможность - написать свои собственные помощники TextBoxFor, HiddenFor, CheckBoxFor, ..., которые будут использовать значение в модели, а не значение в состоянии модели. Или еще одна (не рекомендуемая) возможность:
<input type="text" name="SomeProperty" value="@Model.SomeProperty" />
Конечно, в этом случае проверка клиента, помимо прочего, предоставляемая стандартными помощниками, не будет работать.