現在の進行状況をブロックする ASP.NET MVC 3 アプリケーションで奇妙なニーズがあります。これがケースです:
製品用の小さな検索エンジンがあり、この検索エンジンを複数のページに表示しています。product
この SE は、コントローラーのsearch
アクションに対して HTTP POST 要求を行います。ここまでは大丈夫。
私が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" />
}
最後に、これは*_SearchPartial* をレンダリングするHome
コントローラーアクション ビューです。Index
@{
ViewBag.Title = "Home Page";
}
<h2>@ViewBag.Message</h2>
@Html.Partial("_SearchPartialView")
Product
ここで、フォームを送信してモデルの状態が失敗した場合、コントローラーのSearch
アクションをどのように進めればよいでしょうか?