2013-03-29 8 views
5

強く型付けされたコントローラアクションを作成する方法はありますか?たとえば:コントローラメソッドへのアクションリンクのコンパイル時チェック

コントローラで私が使用します。

aClientLink=Url.Action("MethodName", "ControllerName", new { Params... }); 

私が使用したい:

aClientLink=Url.Action(Controller.MethodName,ControllerName); 

私はホイールを再作成する必要はありません。誰かが賢明な解決策を持っていると確信しています。これにより、コントローラメソッドにコンパイル時間チェックを追加することができます。

+0

私はそれが好きです---それを試してみましょう。ソリューション。しかし! –

答えて

3

式を使用する独自のHtmlHelper拡張メソッドを作成できます(モデルのプロパティを参照するのと同じ方法)。

@* An expression used to indicate which property of the model should be 
examined. It may or may not actually be executed. *@ 
@Html.IdFor(o => o.FirstName) 

@* Don't actually evaluate the expression, just parse it for the method name *@ 
@Url.ActionFor(o => o.ControllerMethod()) 

あなたは、入力値として式を取るヘルパーメソッドの例については、MVCのソースを見ることができ、あなたが表現からオブジェクトのプロパティに関するメタデータを取得する方法については、私のanswer hereを見ることができます。ビューで使用

しかし...

、私はそのようなアプローチは、コントローラにあまりにもしっかりと自分の見解を結びつけることを主張するだろう。私は魔法の弦を嫌いますが、完全なデカップリングを提供しています。

コントローラ内でこのようなメソッドを使用したいのかどうかは不明です。この場合、懸念の分離は問題になりにくくなります。アクション名のエイリアス機能など、特定の能力を失うことになります。

+0

私はHtmlHelperエクステンダーを変換しようとしましたが、これはすべてのクライアント側であり、コントローラーの名前/メソッドを定義できる静的クラスではなく、コンテキストとしてコントローラーでは動作しません...私はstupid const string私がそれを見つけ出すことができるまで値を返します。もう時間はもう残っていない。 –

関連する問題