ASP.NET MVC - база данных меню - PullRequest
       23

ASP.NET MVC - база данных меню

1 голос
/ 28 апреля 2009

У меня есть структура меню базы данных, которую я хотел бы добавить в файл site.master.

Я рассматривал другие вопросы о StackOverflow, но не могу заставить его работать на моем веб-сайте.

Как добавить пользовательский элемент управления в файл Site.Master?

Menu.ascx

<%foreach (MainMenuSort mainMenuSort in (List<MainMenuSort>)ViewData["MainMenuSortListDisplay"])
      { %>
         <li><%= Html.Encode(mainMenuSort.MainMenuId.MainMenuName)%></li>
         <%foreach (SubMenuSort subMenuSort in (List<SubMenuSort>)ViewData["SubMenuSortListDisplay"])
           {%>
            <%if (mainMenuSort.MainMenuId.Id == subMenuSort.SubMenuId.MainMenu.Id)
              { %>
              <li><%= Html.Encode(subMenuSort.SubMenuId.SubMenuName)%></li>
            <%} %>
         <%} %>
      <%}%>

Ответы [ 4 ]

3 голосов
/ 28 апреля 2009

Вам необходимо использовать метод Html.RenderPartial на главной странице.

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

В вашем мастере используйте это

<% Html.RenderPartial("~/Views/Shared/Menu.ascx");

Путь должен быть относительным путем приложения к папке элемента управления. Как правило, они идут под общим. Вы можете сделать структуру, как вы хотите ниже общей папки.

Чтобы сделать эту технику сильнее, используйте строго типизированный частичный. В этом вопросе вы, возможно, создадите новый класс (MenuModel) с двумя общими коллекциями в качестве свойств и поместите его в папку моделей приложения. Затем в конструкторе модели вызовите метод, который заполняет списки.

public class MenuModel
{
   public IEnumerable<MainMenuSort> OuterList {get; set;}
   public IEnumerable<SubMEnuSort> InnerList {get; set;}
   public MenuModel()
   {
       VoidThatFillsTheInnerAndOuterList();
   }

Это будет означать, что вы можете сделать это в вашем контроллере

public ActionResult ShowAForm()
{
   ViewData["MenuPartialData"] = new MenuModel();
   return View();
}

Установив этот ключ, ваша главная страница может использовать перегрузку RenderPartial, как это

<% Html.RenderPartial(
    "~/View/Shared/Menu.ascx", 
    (MenuModel)ViewData["MenuPartialData"]); %>

Предполагается, что ваше частичное строго типизировано в класс MenuModel. Тогда в частичном вы можете использовать модель, которая немного переписывает ваш код

<% foreach (MainMenuSort mainMenuSort in Model.OuterList) { %>
     <li><%= Html.Encode(mainMenuSort.MainMenuId.MainMenuName)%></li>
     <% foreach (SubMenuSort subMenuSort in Model.InnerList) {%>            
        <%if (mainMenuSort.MainMenuId.Id == subMenuSort.SubMenuId.MainMenu.Id)  
        { %>              
           <li><%= Html.Encode(subMenuSort.SubMenuId.SubMenuName)%></li>
      <%} %>
     <%} %>      
    <%}%>

Надеюсь, это поможет

0 голосов
/ 01 мая 2009

С помощью этой ссылки . Мне удалось отобразить меню на странице site.master.

0 голосов
/ 28 апреля 2009

Вы также можете сделать это как HTMLHelper, а в MasterPage просто вызвать <% = Html.Menu ()%>. Затем в вашем HTMLHelper у вас есть код для получения записей базы данных и их циклического просмотра. Вот ссылка , которую я нашел, чтобы вы начали. Обратите внимание на мои комментарии, поскольку в приведенном примере кода есть ошибка. У меня все еще есть проблемы с обработкой подразделов меню, я думаю, мне нужна рекурсивная функция или что-то в этом роде *

0 голосов
/ 28 апреля 2009

Попробуйте что-то вроде

<% Html.RenderPartial("Menu") %>

РЕДАКТИРОВАТЬ: Исправлена ​​опечатка

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...