0

検索ページを作成する必要があるとしましょう。そのページには次のものがあります。

  • 多くの検索パラメーター (param1、param2、...、paramN) を持つ複雑な検索フィルター
  • 結果項目一覧
  • ポケットベル
  • レイアウト スイッチ リンク (リストまたはテーブル ビュー)

検索パラメーターの現在の値 (url から) に関する情報と、url から直接取得されていないいくつかの「推測された」パラメーター (たとえば、ユーザーが地域を指定していない場合は推測できます) を使用して、ビュー モデルをアクションからビューに渡します。彼のIPから)。

さて、ページャーの各リンクに対して、次のようなコードを書く必要があります

<a href="@Url.Action(null, new { page = n, param1, param2, ..., paramN, region })">...

レイアウト スイッチ リンクについては、似ているが異なるコードを記述する必要があります。

<a href="@Url.Action(null, new { page = currentPage, mode = DisplayModes.List, param1, param2, ..., paramN, region })">list</a>
<a href="@Url.Action(null, new { page = currentPage, mode = DisplayModes.Table, param1, param2, ..., paramN, region })">table</a>

私が気に入らないのは、大量のコードが漏洩して表示されたことです。維持するのもテストするのも難しい。

そのような複雑なページの URL を構築するのは、ビューまたはアクションの責任ですか?

4

1 に答える 1

1

RouteValueDictionaryURLのクエリ部分を構築するために使用します。

アクション コードでは、パラメーターを入力して ViewBag に入れます。

var routes = new System.Web.Routing.RouteValueDictionary();
routes.Add("param1", "value1");
routes.Add("param2", "value2");

ViewBag.routes = routes;

そして、次のようにビューにリンクを作成します。

@Html.ActionLink("List", null, (RouteValueDictionary)ViewBag.routes)

または、Url.Action を使用したい場合:

<a href="@Url.Action(null, ViewBag.routes)">List</a>

はい、複雑なロジックがアクションに含まれている必要があるため、単体テストが可能です。ビューにあるロジックが少ない-より良い。

于 2013-03-07T19:26:43.670 に答える