2010-12-16 38 views
1

是否可以在視圖中檢測路由值?檢測視圖中的路由值

/pages/create/1我想查看1是否在那裏?

基本上,我想渲染一個基於這個值的不同的局部視圖,但我相當肯定這可能不是我想要實現的最好方法。

在附註上,我可以根據控制器中的值來更改部分視圖在視圖中的渲染效果嗎?

回答

1

您可以通過ViewPage.ViewContext.RouteData檢查RouteData對象。然後檢查使用的東西像值

string areaname = routeData.Values["area"] as string; 
string controllername = routeData.Values["controller"] as string; 
string actionname = routeData.Values["action"] as string; 
string id = routeData.Values["id"] as string; 

如果你發現你要檢查控制器這些數值相反,你可以使用ControllerBase.ControllerContext.RouteData訪問它們。同樣的事情也適用於行動過濾器等

1

其他的答案是正確的,但想到我會滿足你的最後一句話:

在一個側面說明,而不是上面做的事情是有可能對我是能夠根據我的控制器中的值更改部分視圖在視圖中呈現的內容?

好局部視圖的呈現在視圖本身(除非從JavaScript調用,並直接綁定到DOM)與下面的代碼:

<%: Html.RenderPartial("SomePartial") %> 

因此,爲了防止「代碼湯」(if語句)中您的看法,您可以使用HTML幫助其檢查ViewContext後通過電話向的RenderPartial:

public static string RenderCustomPartial(this HtmlHelper helper, RouteData rd) 
{ 
    string partialName; 

    if (rd.Values["SomeParam"] == 1) 
    partialName = "PartialOneName"; 
    else 
    partialName = "PartialTwoName"; 

    return helper.RenderPartial(partialName); 
} 

然後在視圖:

<%: Html.RenderCustomPartial(ViewContext.RouteData) %> 

你可以對上述內容進行一些修改 - 比如直接在擴展中訪問路徑數據,通過模型綁定到部分等 - 但你明白了。

或者,您可以在控制器中執行上述IF語句,並在ViewData中填入部分視圖名稱,然後在視圖中的常規RenderPartial調用中使用該名稱。

無論漂浮你的船。 :)