Использование _ViewStart для рендеринга частичных бритвенных страниц - PullRequest
0 голосов
/ 02 мая 2020

У меня есть основной проект asp. net со страницей макета:

_Layout.cshtml

По умолчанию asp. net core _Layout page. Модель не используется.

В папке Areas у меня есть несколько файлов:

Vendor > Pages > _ViewStart.cshtml
Vendor > Pages > _Menu.cshtml
Vendor > Pages > Index.cshtml

Эти файлы выглядят так:

_ViewStart

@{
    Layout = "/Views/Shared/_Layout.cshtml";
}
@{ await Html.RenderPartialAsync("_Menu"); }

_Menu

@page
@model MyProject.Areas.Vendor.Pages.MenuModel
@{
    foreach(var i in Model.MenuItems)
    {
        @Html.ActionLink(i.DisplayText,i.Url)
    }
}

Индекс

@page
@model MyProject.Areas.Vendor.Pages.IndexModel
@{
}

<h1>Hello, world!</h1>

Теперь я хочу посетить Vendor index Razor page, но я хочу, чтобы она сначала отображала параметры _Menu, следовательно, _ViewStart с _Layout и также _Menu - в основном на каждой странице Vendor, которую я посещаю, должен отображаться _Menu первым .

Но когда я посещаю Индекс, я получаю эту ошибку:

The model item passed into the ViewDataDictionary is of type 'MyProject.Areas.Vendor.Pages.IndexModel', but this ViewDataDictionary instance requires a model item of type 'MyProject.Areas.Vendor.Pages.MenuModel'

Как это может быть? Я ничего не передаю на страницу Index? И когда я попытался указать null в качестве аргумента для RenderPartialAsync(), я просто получил null reference exception на своей странице _Menu.

Как мне добиться того, что мне нужно?

Это должно сделать _Layout> _ViewStart> _Menu> AnyOtherVendorPage

1 Ответ

1 голос
/ 04 мая 2020

Вот рабочая демонстрация, как показано ниже:

1. Частичное представление должно быть бритвой вместо страниц бритвы:

@model List<YourProject.Models.MenuItem>
@{
    foreach (var i in Model)
    {
        @Html.ActionLink(i.DisplayText, i.Url)
    }
}

2._ViewStart.cs html:

@{
    Layout = "/Views/Shared/_Layout.cshtml";
    var model = new List<YourProject.Models.MenuItem>()
    {
        new YourProject.Models.MenuItem(){ DisplayText="aaa", Url="aaa" },
        new YourProject.Models.MenuItem(){ DisplayText="bbb", Url="bbb" },
    };
}

@{ await Html.RenderPartialAsync("_Menu", model); }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...