私のアプリケーションのビューの1つに検索フィルタを実装しています。私は@Html.BeginForm()
とGETリクエストを使ってrouteValuesをコントローラアクションに渡すことに苦労しています。MVC BeginForm - GETを使用してコントローラにパラメータを渡す
アクションは、次のプロパティを使用できます
public ActionResult Books(int id, string type, string search)
{
//rest of the code
}
ビューの検索ボックスには、次のようになります。
@model ILookup<string, CityLibrary.Models.Library.Book>
....
@using (Html.BeginForm("Books", "Collections", new { id = Model.First().First().CollectionId, type = ViewBag.BookType }, FormMethod.Get, null))
{
<div class="input-group col-md-4">
@Html.TextBox("search", null, new { @class = "form-control form-control-fixed-width", @placeholder = "Filter title..." })
<span class="input-group-btn">
<button class="btn btn-default" type="submit">
<span class="glyphicon glyphicon-search"></span>
</button>
</span>
</div>
}
私は検索ボックスを提出していたときに問題が発生します。コントローラーアクションはid
とsearch
文字列を取得しますが、type
はnull
です。ViewBag.BookType
はnull
ではありません。フィドラーはこれを示しています
GET /コレクション/書籍/ 2検索=完全リクエストで
type
パラメータを無視しているようだ検索語
?。ブラウザで
ソースコード:
<form action="/Collections/Books/2?type=available" method="get">
<div class="input-group col-md-4">
<input class="form-control form-control-fixed-width" id="search" name="search" placeholder="Filter title..." type="text" value="" />
<span class="input-group-btn">
<button class="btn btn-default" type="submit">
<span class="glyphicon glyphicon-search"></span>
</button>
</span>
</div>
</form>
それはGETメソッドとは何かを持っていますか?私は基本的に同じコードで別のコントローラアクションを記述しなければならないので、POSTを避けたいと思います。
EDIT: GETリクエストを使用しようとすると問題が発生したようです。フォームをポストすると、実際にはすべてのパラメータがコントローラアクションに渡されます。何故ですか?
のURLになります提出それは 'ViewBag.BookType'が**であることを示唆している** 「ヌル」。ビューに「
それはしません。 '@ViewBag.BookType'は、上のビュー(正しいヘッダーを表示するための単純な 'if/else'ステートメント)でも使用されます。私はまた、型のプロパティをハードコードしようとしました。 CollectionMod、Type = "available"}、FormMethod.Get、null)) 'も返す' Html.BeginForm( "Books"、 "Collections"、新しい{id = Model.First() 「ヌル」の「タイプ」。 – Dandry
あなたは実際に '..../{id}/{type}'で定義されたルートを持っていますか(そうでなければルート値を追加できません) –