質問

検索結果をフィルタリングするためのリンクを提供しようとしています。

    <%= 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 つあると思います。

  1. 間違ったルート情報:rootes.maproute(...)global.ascx.cs/vbファイルで呼び出しをチェックして、ホーム#インデックスアクションのルートが適切に構成されていることを確認してください
  2. 間違ったコントローラー:コントローラーを明示的に指定する 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エントリポイントを設計するためのベストプラクティスは、パラメータをソート/パラメータなしのそれを維持、または濾過のみを通過させることであると考えています。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top