2009-06-28 7 views
0

検索結果を絞り込むためのリンクを提供しようとしています。Html.ActionLinkの問題

<%= Html.ActionLink("Filter Results", "Index", new { page = Model.RestaurantList.PageIndex(), searchText = Model.SearchText, useFilter = true, filterOption = Model.FilterOption, filterText = Model.FilterText }, null)%> 

コントローラ定義は、しかし、私は値が、正しくもuseFilter変数が設定されていない、これをデバッグするとき、このような

public ActionResult Index(int? page, string searchText, bool useFilter, string filterText, string filterOption) 

通りです。

私のリンクはローカルホストの/ home /インデックス/真レンダリングされる?ページ= 0

任意のアイデアこの問題を解決する方法?

答えて

2

コードセグメントが正常に表示されます。

  1. 間違ったルート情報:私は2のエラーの可能性があると思い routes.MapRoute(...)をチェックホーム#インデックスのために必ず ルートにするために global.ascx.cs/VBファイルで呼び出しますアクションは 適切に設定
  2. 間違ったコントローラです:明示的にあなたはまだそれが動作するように作ることができない場合は、ルートマップなどの詳細情報を(投稿したい場合がありますコントローラ

を指定ActionLinkののオーバーロードを使用してみてくださいコード、ビュー/コントローラの名前)

+0

これはルートの問題でした。私はルートを追加する順序を見落としました。 – ddd

0

動作するはずです。

ActionLinkに渡すモデルフィールドに実際にデータが含まれていることを確認しましたか?

0

しかし、これをデバッグすると、値が適切に設定されていません。これはuseFilter変数です。 私のリンクはlocalhost/home/index/trueにレンダリングされますか?page = 0

あなたのuseFilterパラメータは実際にレンダリングされると思います。それは私が推測するルートにマップされています。それが現れた場合

は、あなたは、コントローラでモデルを設定していない、検索テキスト

ためにハードコードされた値を設定してください。

0

私は同様の状況でした。このような

何か:

Html.ActionLink("Click me", "Index", "Student", 
     { ID = theclass.StudentID }, null) 

は常に

localhost/myapp/Student/Index/1234 

私が試したが、私は私のようなものにIDからパラメータ名を変更した場合Index部分はURLから姿を消したことに気づいたとしてレンダリングIDX

localhost/myapp/Student/?IDX=1234 

Global.asaxのデフォルトルートエントリのために、パラメータ名IDが特別であることが判明しました。(RESTfulなビジネスオブジェクトへのアクセスパターンを設定します)CS

この問題を回避するには、私は単にIDを取るためにIndexを使用して停止し、代わりにこのような別の方法で定義されたすべての後に

public ActionResult Detail(int ID) 

、RESTfullデザインごとに原則としてIndexは、「ビジネスオブジェクトのリスト」または単一のビジネスオブジェクトではなく、ある種のビジネスオブジェクトのコレクションを示すためのものです。したがって、ビジネスオブジェクトIDをIndexに渡すことは、パターンに違反しています。

腕をねじって私の厄介なデザインを強制するのではなく、自然な方法に変更しました。

Indexエントリポイントを設計するためのベストプラクティスは、パラメータなしのままにするか、またはフィルタ/並べ替えパラメータのみを渡すことです。

関連する問題