ASP.NET MVC:Как визуализировать частичное представление для всех представлений, кроме одного?

StackOverflow https://stackoverflow.com/questions/787790

  •  16-09-2019
  •  | 
  •  

Вопрос

У меня есть частичный элемент управления представлением/пользователем под названием LogOnUserControl, который я показываю на боковой панели на своем сайте (определенном в Site.Master).У меня также есть отдельное представление LogOn, которое также отображает LogOnUserControl.

Мне не нужны два экземпляра LogOnUserControl в представлении LogOn, потому что это просто сбивает с толку, поэтому я сейчас думаю включить такое условие, как

// Semi-pseudocode
if (!Request.IsAuthenticated) && View.Name != "LogOn")

в LogOnUserControl.

Это кажется неправильным, поскольку частичное представление теперь знает о представлении входа в систему.Кроме того, я не могу узнать, как получить имя представления, что усиливает ощущение, что я делаю что-то не так!:-)

Редактировать: Существует еще одна сложность: одно и то же частичное представление используется как для представления входа в систему, так и для боковой панели в Site.Master.

Это было полезно?

Решение

На главной странице оберните содержимое области боковой панели тегами области содержимого и присвойте ей идентификатор, например SideBarContentArea или что-то в этом роде.Это создает новую область контента, которую вы можете переопределить на страницах на основе мастера, и определяет контент по умолчанию, который будет отображаться, если вы не реализуете его на дочерних страницах.Теперь на странице входа все, что вам нужно сделать, это переопределить SideBarContentArea и на этот раз не включать элемент управления входом.

Бада Бинг!

Другие советы

Рассматривали ли вы возможность использования другой главной страницы для представления входа в систему без части входа в систему на боковой панели?Если вас беспокоит дублирование HTML-разметки, вы можете использовать вложенные главные страницы, чтобы избежать этой проблемы.

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

<% if (ViewData["HideLogOnUserControl"] == "Y") { %>
    Insert HTML here
<% } else { %>
    Insert HTML here
<% } %>
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top