2013-11-30 2 views
0

Итак, я ищу, чтобы получить данные из базы данных и добавить ее на страницу просмотра КАЖДЫЙ. Поэтому добавление его в Views/Shared/_Layout.cshtmlДобавить данные базы данных на каждую страницу просмотра бритвы

Как это сделать, не добавляя модели в представление на каждом контроллере?

Я хочу, чтобы добавить пункты меню динамически из базы данных каждого вида, у меня есть это в _Layout.cshtml:

@foreach (var item in Model) 
{ 
    <li><a href="/Cms/@item.Url">@item.Title</a></li> 
} 

И это в моем HomeController:

return View(db.Menus.ToList()); 

Но я не хотите делать это в каждом действии контроллера, как я могу сделать это проще?

ответ

0

Используйте способ RenderAction для визуализации только той части, которую вы хотите.

Я настоятельно рекомендую вам проверить проект MVC Music Store - в нем есть много лучших практик. Решение для точной задачи заключается в _Layout.cshtml файла, код:

@{Html.RenderAction("GenreMenu", "Store");} 
+0

Не является ли проект музыкального магазина mvc на основе MVC3? Я использую MVC5, я думаю, – user3052560

+0

Это для MVC3. Но это основы, которые не изменились с MVC3. Кстати, MVC5 был выпущен не так давно, и еще слишком рано судить о том, какие методы являются лучшими. – DarkWalker

0

Давайте предположим, что у вас есть модель, которая представляет ваше меню в базе данных

Для того, чтобы получить это в каждом ViewPage , вам необходимо создать «BaseController», из которого наследуется каждый другой контроллер. В этом контроллере вы определяете меню в конструкторе.

public class BaseController : Controller 
{ 
    public BaseController() 
    { 
     //I don't know how you get your data 
     ViewBag.DatabaseMenu = repository.GetMenuItems(); 
    } 
} 

Fromn этого момента добавления : BaseController всех контроллеров и вы будете иметь DatabaseMenu доступны в вашем ViewBag на всех страницах, чтобы построить свое меню из.

Как вы это делаете, зависит от вас. Вы можете создать коллекцию типа List<MenuItem> и сказать List<MenuItem> Menu = ViewBag.DatabaseMenu; и перебрать с помощью foreach над своими товарами, чтобы создать меню

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