2012-04-16 23 views
0

私はASP.NET MVCウェブアプリケーションを持っており、あるページにそのアイテムの詳細へのリンクを含むアイテムのテーブルを表示したいと考えています。かなり基本的。ただし、リストに表示したいアイテムはすべて共通の基本タイプのサブクラスなので、リンクでは異なるコントローラアクションを参照する必要があります。異なるコントローラーアクションにリンクするアイテムのリストを作成するにはどうすればよいですか?

私の質問は次のとおりです。これらのリンクはどこに構築する必要がありますか(下の例を参照)

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

「タスク」と「イベント」「代入」は、両方のサブクラスである
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 

:一例として

は、私の「割り当て」の表のように見えるとします。

答えて

0

私が言っている短いバージョンは、あなたがIDとタイプを渡す、AssignmentLinkと呼ばれる新しいアクションリンク拡張メソッドを作成することです。

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

以前のmvcアプリケーションでは、ハイパーリンクは私たちに多くの頭痛をもたらしました。コントローラの名前を変更したり、コントローラを新しいエリアなどに移動したりすると、そのコントローラへのすべての参照が永久に更新されました。最近のプロジェクトでは、すべてのハイパーリンクロジックを「linkdata」というオブジェクトにまとめました。

次に、ヘルパー内のロジックを持つlinkdataオブジェクトの拡張を作成しました。

http://codingsmith.co.za/extending-the-actionlink-helper-in-mvc/興味があれば、あなたの例ではそれほど遠く離れていてもかまいませんが、単純な拡張がそれを行います。

関連する問題