В Catch, если я добавлю Return View (форму), я потеряю сообщение, переданное через ViewData.
Насколько я понимаю, вы не теряете сообщение, переданное через ViewData - эта функция просто не запускается.
И я бы настоятельно рекомендовал не делать перенаправление или использовать TempData для того, чего вы пытаетесь достичь, в этом просто нет никакого смысла и нет способа, которым MVC должен работать.
Продолжая то, что у вас есть, у меня была бы частная функция, которую оба действия вызывают, чтобы вернуть представление. Он содержит ваши ViewData («message») в одном месте, и у вас все еще есть предыдущие значения в форме (и внутри ModelState, как сказал Джош Э).
ВНИМАНИЕ: код VB.NET от программиста C #; -)
Function Index() As ActionResult
Return IndexView(New MyTable)
End Function
<ActionName("Index"), AcceptVerbs(HttpVerbs.Post)> _
Function Save(ByVal form As MyTable) As ActionResult
Try
SaveMyData(form)
Return RedirectToAction("Index")
Catch
AddModelError("form", "An error occurred.")
End Try
Return IndexView(form)
End Function
Private Function IndexView(ByVal form As MyTable) As ActionResult
ViewData("message") = "Hello"
Return View(form)
End Function
HTHS,
Charles
Ps. Я просто хотел бы добавить, что я нахожу странным, что у вас есть страница индекса, которая отправляет сообщения обратно себе, а затем, если сообщение содержит ошибки, оно отображает страницу индекса снова, НО, если нет ошибок, она перенаправляет обратно на страницу индекса .
Я не знаю, что делает приложение, но похоже, что вы используете индексную страницу / представление для слишком многих вещей.