2013-03-29 70 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字符串值直到我能算出來。現在沒有更多的時間了。 –