質問
検索結果をフィルタリングするためのリンクを提供しようとしています。
<%= Html.ActionLink("Filter Results", "Index", new { page = Model.RestaurantList.PageIndex(), searchText = Model.SearchText, useFilter = true, filterOption = Model.FilterOption, filterText = Model.FilterText }, null)%>
コントローラーの定義はそのとおりです
public ActionResult Index(int? page, string searchText, bool useFilter, string filterText, string filterOption)
ただし、これをデバッグすると、useFilter 変数も含め、値が正しく設定されません。
私のリンクは localhost/home/index/true?page=0 として表示されます
これを修正する方法はありますか?
解決
コードセグメントは問題ないようです。考えられるエラーは 2 つあると思います。
- 間違ったルート情報:rootes.maproute(...)global.ascx.cs/vbファイルで呼び出しをチェックして、ホーム#インデックスアクションのルートが適切に構成されていることを確認してください
- 間違ったコントローラー:コントローラーを明示的に指定する ActionLink のオーバーロードを使用してみてください
それでも動作しない場合は、詳細情報 (ルート マッピング コード、ビュー/コントローラーの名前など) を投稿するとよいでしょう。
他のヒント
それは動作するはずのように見えます。
あなたはActionLinkのに渡しているモデルフィールドは、実際にデータが含まれていることを確認しましたか。
しかし、私は、この値は、適切にさえuseFilter変数を設定されていないデバッグするとき。 私のリンクがレンダリングされるローカルホストの/ home /インデックス/本当?ページ= 0
私はあなたのuseFilterパラメータが実際にレンダリングされると思います。その私が推測するルートにマッピングされます。
検索テキストのためにハードコードされた値を設定するようにしてください。
それが現れた場合、あなたは、コントローラでモデルを設定しませんでした。
私は似たような状況があった。
このような何かます:
Html.ActionLink("Click me", "Index", "Student",
{ ID = theclass.StudentID }, null)
常に
としてレンダリングlocalhost/myapp/Student/Index/1234
私が試したが、私はIndex
のようなものにID
からパラメータ名を変更した場合IDX
部分はURLから姿を消したことに気づいた。
localhost/myapp/Student/?IDX=1234
これは、理由(RESTfulなビジネスオブジェクトのアクセスパターンを設定します)Global.asax.csのデフォルトのルートエントリ
のパラメータ名ID
が特別であることが判明します
この問題を回避するために、私は単純にIDを取るためにIndex
を使用して停止し、代わりにこのような別の方法を定義します:
public ActionResult Detail(int ID)
は、すべての後、RESTfullの設計原理につき、Index
は、「ビジネスオブジェクトのリスト」またはビジネス・オブジェクトではなく、単一のビジネス・オブジェクトのコレクションのいくつかの並べ替えを示すためのものです。だから、Index
にビジネス・オブジェクトのIDを渡すと、パターン違反の一種です。
、私は自然な方法に変更します。
私はIndex
エントリポイントを設計するためのベストプラクティスは、パラメータをソート/パラメータなしのそれを維持、または濾過のみを通過させることであると考えています。