2012-09-03 16 views
2

我不喜歡Url.Action(「串」,「串),因此下面的擴展方法寫類型安全的URL行動

public static string Action<TController>(this UrlHelper urlHelper, Expression<Func<TController, object>> actionExpression) 
{ 
    var controllerName = typeof(TController).GetControllerName(); 
    var actionName = actionExpression.GetActionName(); 

    return urlHelper.Action(actionName, controllerName); 
} 

我用它在我的Razor視圖象下面這樣:

@{Url.Action<ClientController>(action => action.ClientDetails());} 

它不呈現任何內容。我是否造成任何錯誤或任何地方我錯過了什麼?是否有可能,因爲我喜歡的類型安全的性質,而不是硬編碼actionnames和控制器做到這一點?

+0

你吃過看看MvcContrib?這種東西已經實現了(幾次之前) –

+0

System.Type沒有一個名爲GetControllerName的方法。你的'代碼要麼不會編譯,要麼會從實現的實現中受益(如果是這樣的話),當然同樣適用於getActionName –

+0

我在Type for GetControllerName()上實現了一個擴展方法,並且我已經編譯了該項目到我所處的地步。我只是不確定如何在剃刀視圖中使用 – DotNetInfo

回答

1

使用括號表示一個代碼塊。使用括號(見下面)是一個明確的表達式。該表達式將作爲HTML的一部分輸出,但代碼塊不會。

@(Url.Action<ClientController>(action => action.ClientDetails())) 

Check out this SO post for a more complete answer.