Потому что «оригинал» хранится в ModelState. Когда значения формы собираются на стороне MVC, они сохраняются в ModelState
объекте. Вы вероятно использовали Html.TextBox
помощник. Когда вы воссоздаете представление после POST, оно сначала просматривает ModelState и, если есть опубликованное значение, устанавливает это значение. Значение в объекте модели больше не считается.
Одним из решений является следование шаблону POST-REDIRECT-GET. Сначала POST, сделайте что-нибудь с данными, а затем перенаправьте:
[HttpPost]
public ActionResult Index(MyModel appModel)
{
//do something with data
return RedirectToAction("Index");
}
Если вы хотите передать что-то между перенаправлениями, вы можете использовать TempData
:
[HttpPost]
public ActionResult Index(MyModel appModel)
{
//do something with data
TempData["Something"] = "Hello";
return RedirectToAction("Index");
}
[HttpGet]
public ActionResult Index()
{
var something = TempData["Something"]; //after redirection it contains "Hello"
}
После перенаправления ModelState больше не используется, поэтому значение переопределения отсутствует. Шаблон POST-REDIRECT-GET также помогает избавиться от эффекта перепечатывания формы при нажатии клавиши F5 в браузере.