У меня странная потребность в приложении ASP.NET MVC 3, которое блокирует мой текущий прогресс. Вот случай:
У меня есть небольшая поисковая система для продуктов, и я отображаю эту поисковую систему на нескольких страницах. Этот SE отправляет HTTP-запрос POST к действию product
контроллера search
. Это хорошо, пока здесь.
Предположим, что я на home
действии контроллера index
(/ home / index) . Я делаю поиск и проверяю ModelState.IsValid
. В результате это не действует. Итак, я должен вернуть это обратно с введенной моделью (чтобы пользователь не потерял значения) и ошибками состояния модели. Но когда я это сделал, у меня получился другой URL (/ product / search), как и ожидалось.
Если я сделаю перенаправление, я потеряю ModelState
и не смогу отображать сообщения об ошибках.
У меня пока разные решения, и все они выглядят грязными. Есть идеи?
Редактировать
Вот небольшой проект, который демонстрирует это:
Это ProductController
:
public class ProductController : Controller {
[HttpPost]
public ActionResult Search(SearchModel searchModel) {
if (ModelState.IsValid) {
//Do some stuff...
return RedirectToAction("Index", "SearchResult");
}
return View(searchModel);
}
}
Это SearchModel
:
public class SearchModel {
[Required]
public string ProductCategory { get; set; }
[Required]
public string ProductName { get; set; }
}
Это * _SearchPartial *:
@model MvcApplication20.SearchModel
@using (Html.BeginForm("search", "product"))
{
@Html.EditorForModel()
<input type="submit" value="Search" />
}
И, наконец, это Home
вид действия контроллера Index
, который отображает * _SearchPartial *:
@{
ViewBag.Title = "Home Page";
}
<h2>@ViewBag.Message</h2>
@Html.Partial("_SearchPartialView")
Здесь, когда я отправляю форму и если состояние модели не удается, как мне поступить в действии Product
controller Search
?