Как передать данные в PartialView в моем макете? - PullRequest
1 голос
/ 30 сентября 2011

У меня есть _layout.cshtml, содержащий эту строку:

@{Html.RenderPartial("Menu");}

Теперь я хочу передать модель в эту RenderPartial-функцию. Эту модель можно прочитать из моего репозитория.

Как и где (в коде) это можно сделать?

Спасибо!

Ответы [ 2 ]

3 голосов
/ 30 сентября 2011

RenderPartial имеет перегрузку, которая может принять объект для отправки его в частичное представление.Не забудьте указать @model в верхней части вашего частичного представления для работы с нужным типом объекта.

@Html.RenderPartial ("ViewName", object)

Дополнительная информация: MSDN

Редактировать после комментария:

Я думаю, было бы проще создать MenuController, который принимает в хранилище.Затем позвольте ему создать представление, которое принимает требуемый репозиторий в качестве модели, а затем с помощью foreach визуализировать каждый элемент меню в качестве ссылок действия, передавая ему информацию меню.

Таким образом, вы должны иметь это в своем _layout.cshtml:

<div id="Menu">
    @{Html.RenderAction("Menu", "Menu");}
</div>

Это в вашем MenuController:

public class MenuController : Controller
{
    private IMenuRepository _repository;

    public MenuController(IMenuRepository repo)
    {
        _repository = repo;
    }
    //
    // GET: /Menu/

    public PartialViewResult Menu(string menu = null)
    {
        ViewBag.SelectedMenu = menu;

        IEnumerable<MenuInfoObject> menus= _repository.Menus;
        return PartialView(menus);
    }
}

И в вашем MenuView:

    @model IEnumerable<MenuInfoObject>
@{
    Layout = null;
}
@foreach (var item in Model)
{
    @Html.RouteLink(item.MenuName, new
{
    controller = item.ControllerInfo,
    action = item.ActionInfo,
}, new
       {
           @class = item.Menu == ViewBag.SelectedMenu ? "selected" : null
       })
}

Это было бы ближе к решению?

0 голосов
/ 23 июля 2014

Существует и другое решение для передачи данных в частичное представление в Layout.Вы можете просто добавить это в свой файл _Layout.cshtml

@Html.Action("ActionName","ControllerName")

и в свой контроллер:

    [ChildActionOnly]
    public ActionResult ActionName()
    {
        var model = new YourModel();
        return PartialView(model);

    }

Атрибут ChildActionOnly гарантирует, что метод действия может быть вызван только какдетский метод.Это действие отобразит соответствующий частичный вид с моделью в Layout.

...