ASP.NET MVC:Как визуализировать частичное представление для всех представлений, кроме одного?
-
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
<% } %>