2013-05-10 5 views
0

Я пытаюсь отобразить разные частичные представления из файла _Layout в зависимости от того, в какой функции я вхожу, с точки зрения контроллера.Render different partial views

Частичный вид находится в правой колонке сайта, который находится в _layout так:

<aside id="right"> 
@Html.Partial("RightPartial") 
</aside> 

То, что я хочу сделать, это рендеринг частичный вид в зависимости от того, где я нахожусь. Если я нахожусь в представлении «Индекс», я, возможно, захочу просмотреть новости, а в представлении «О программе» я могу просмотреть номера телефонов или что-то еще.

Цените любую помощь :)

ответ

1
@{ 
    string currentAction = ViewContext.RouteData.GetRequiredString("action"); 
    string currentController = ViewContext.RouteData.GetRequiredString("controller"); 
} 

Теперь на основе значений этих переменных, которые решают неравнодушен к визуализации. Для того, чтобы избежать загрязнений раскладки я бы написать пользовательский HTML помощник:

<aside id="right"> 
    @Html.RightPartial() 
</aside> 

, которые могли бы выглядеть следующим образом:

public static class HtmlExtensions 
{ 
    public static IHtmlString RightPartial(this HtmlHelper html) 
    { 
     var routeData = html.ViewContext.RouteData; 
     string currentAction = routeData.GetRequiredString("action"); 

     if (currentAction == "Index") 
     { 
      return html.Partial("IndexPartialView"); 
     } 
     else if (currentAction == "About") 
     { 
      return html.Partial("AboutPartialView"); 
     } 

     return html.Partial("SomeDefaultPartialView"); 
    } 
} 
+0

куда должен «общественное HtmlExtensions статического класса» идти? – Mappan

+1

Где угодно. У вас может быть папка «Расширения» или то, что вы считаете правильным. Это просто метод расширения, который вам нужно привнести в область видимости, чтобы иметь возможность ее вызывать. Либо добавьте пространство имен, в котором этот класс определен как директива '@ using' в верхней части представления, либо добавьте его в раздел' 'вашего файла' ~/Views/web.config', и будет доступен специальный помощник во всех взглядах. –

+0

Это сработало, спасибо. – Mappan