2010-12-16 2 views
1

Возможно ли определить значение маршрута в представлении?Определить значения маршрута в представлении

Как /pages/create/1 и я хочу проверить, есть ли 1?

В принципе, я хочу отобразить другой частичный вид, основанный на этом значении, хотя я уверен, что это, вероятно, не самый лучший способ добиться того, чего я пытаюсь достичь.

На стороне примечания, вместо того чтобы делать выше, возможно ли, чтобы я мог изменять, какие частичные представления отображаются в представлении на основе значения из моего контроллера?

ответ

1

Вы можете осмотреть RouteData объект через ViewPage.ViewContext.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

Другие ответы правильны, но думал, что я бы рассмотреть вашу последнюю фразу:

На стороне записки, вместо того, чтобы делать выше это возможно для меня, чтобы быть в состоянии изменить, какие частичные представления отображаются в представлении на основе значения из моего контроллера?

Ну частичный вид-х оказываются в самом View (если не вызывая из JavaScript и привязки непосредственно к DOM) с помощью следующего кода:

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

Так, чтобы предотвратить «код суп» (если заявления) в ваше мнение, вы используете HTML-помощник, который вызывает до RenderPartial после осмотра ViewContext:

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 в вашем представлении.

Независимо от того, что плавает ваша лодка. :)

Смежные вопросы