0

ASP.NET MVC Webアプリがあり、1つのページに、そのアイテムの詳細へのリンクを含むアイテムの表を表示したいと思います。かなり基本的です。ただし、リストに表示したい項目はすべて共通ベースタイプのサブクラスであるため、リンクはさまざまなコントローラーアクションを参照する必要があります。

だから、私の質問は:これらのリンクをどこで/どのように構築する必要がありますか(以下の例を参照)?

すでにいくつかの方法で目標を達成できます(たとえば、ビジネスオブジェクトをビューモデルにマッピングしながらルートを構築する、ビューモデルでフラグまたはマジックストリングを使用する、適切なビューを選択する単一の「ベース」コントローラーアクションを使用するなど)。しかし、特に「クリーン」に見えるものはないため、これはメカニックよりもベストプラクティスに関する質問です。

例として、私の「割り当て」テーブルが次のようになっているとします。

Id   <OtherCommonFields>  Type    Name           Link
1    <some data>          Event   Some event     /event/1
4    <some data>          Task    Some task      /task/4
3    <some data>          Event   Another event  /event/3
2    <some data>          Task    Another task   /task/2
5    <some data>          Event   One more event /event/5

ここで、「タスク」と「イベント」はどちらも「割り当て」のサブクラスです。

4

1 に答える 1

0

私が言う短いバージョンは、AssignmentLinkと呼ばれる新しいactionlink拡張メソッドを作成することです。ここで、IDとタイプを渡します。

Assignmentlinkメソッド内で、タイプを切り替えて、アクションリンクの形式で正しいURLを返します。そうすれば、さまざまな種類の割り当てなどを追加する場合に、1つの中央ヘルパーですべてを制御できます。

以前のMVCアプリでは、ハイパーリンクが多くの頭痛の種を引き起こしていました。コントローラの名前を変更したり、コントローラを新しい領域に移動したりすると、そのコントローラへのすべての参照を更新するのに永遠に時間がかかりました。そのため、最新のプロジェクトでは、すべてのハイパーリンクロジックを「linkdata」というオブジェクトにまとめました。

次に、ヘルパーまたは拡張機能のロジックを使用して、linkdataオブジェクトの拡張機能を作成しました。

http://codingsmith.co.za/extending-the-actionlink-helper-in-mvc/興味がある場合でも、例でははるかに少ない方法で解決できます。単純な拡張機能で十分です。

于 2012-04-16T12:29:38.873 に答える