Ошибка при использовании @{Html.RenderPartial на страницах Razor

после ответа здесь о том, как повторно использовать блок HTML на новых страницах Razor, я получаю следующую ошибку:

> InvalidOperationException: элемент модели, переданный в ViewDataDictionary, имеет тип «xxxxx.Pages.IndexModel», но для этого экземпляра ViewDataDictionary требуется элемент модели типа xxxxx.Pages._mainMenu_Page.

in Index.cshtml:

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

Это файл index.cshtml (часть - соответствующая часть):

page
@model IndexModel
@{
    ViewData["Title"] = "Home page";
 }



<div class="row">
    <section class="parallaxBox">

        <div class="UpperMenu">
            <div class="col-lg-1 col-md-1 hidden-sm hidden-xs">

            </div>

            <div class="col-lg-5 col-md-5 col-sm-6 col-xs-6">
                <h1><span>Menachem Design</span></h1>
            </div>



             <div class="col-lg-6 col-md-6 col-sm-6 col-xs-6">


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

            </div><!-- /col-lg-6 -->

        </div><!-- /.UpperMenu -->

и, очевидно, эта строка вызывает проблему:

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

и представление (_mainMenu):

@page


 <nav class="UpperNavigation navbar navbar-default">
   <div class="container-fluid">
     .... (the rest of the HTML code)

Пробовал гуглить, а также смотреть здесь, но ответа не нашел В чем проблема?


person Menahem Gil    schedule 14.12.2017    source источник
comment
Используете ли вы здесь Razor Pages, а не только чистый MVC? Почему у вас есть тег @page в частичном представлении?   -  person DavidG    schedule 14.12.2017
comment
Кроме того, вы можете упростить код до @Html.RenderPartial("_mainMenu"), без фигурных скобок и точек с запятой.   -  person DavidG    schedule 14.12.2017
comment
Можете попробовать `Html.RenderPartial(_mainMenu,null);. Бьюсь об заклад, это позволит View Context узнать, что не следует ожидать модель. Вероятно, это умно и пытается сопоставить модель по имени представления, когда модель не указана.   -  person Ross Bush    schedule 14.12.2017
comment
@RossBush ViewData содержит модель, переданную каждому представлению. Если метод (например, RenderPartial) не указывает новую модель, передается текущая модель. Проблема здесь в том, что WebPages (которые не являются MVC) используют @page для указания page. Я почти уверен, что вы не можете указать страницу WebPage как страницу и частичную. Удаление @page решит проблему.   -  person Erik Philips    schedule 14.12.2017
comment
@DavidG Да, только Razor Pages, а не MVC - причина в том, что это простой веб-сайт, и ему не нужна сложность MVC. Поэтому я использую Razor Pages. У меня есть '@page, потому что вы должны использовать его в новом ядре ASP.NET 2.   -  person Menahem Gil    schedule 14.12.2017
comment
@DavidG для RenderPartial Мне приходится использовать фигурные скобки, потому что он отправляет html прямо в поток, а не возвращает значение   -  person Menahem Gil    schedule 14.12.2017
comment
@RossBush Я пробовал '@{Html.RenderPartial(_mainMenu, null);}' все равно получаю ошибку   -  person Menahem Gil    schedule 14.12.2017
comment
@RossBush Я удалил страницу @page из _mainMenu, и теперь она работает. Но теперь я в замешательстве. Потому что посмотрите, что Microsoft пишет в своей документации: «@page должна быть первой директивой Razor на странице. '@page влияет на поведение других конструкций Razor'. docs.microsoft.com/ en-us/aspnet/core/mvc/razor-pages/   -  person Menahem Gil    schedule 14.12.2017
comment
Я думаю, что на этот вопрос есть ответ? stackoverflow.com/ вопросы/46906846/   -  person Tim    schedule 17.12.2017
comment
@Tim Пока не ответили. Я все еще не понимаю, почему Microsoft заявила, что вам нужно использовать @page на каждой странице, но тогда вы получаете сообщение об ошибке, и только если вы удалите @page, ошибка исчезнет. Я хочу понять и узнать причину   -  person Menahem Gil    schedule 18.12.2017
comment
Ответ в первом комментарии...передайте модель.   -  person Tim    schedule 18.12.2017
comment
Первый комментарий спрашивает, использую ли я страницы MVC или Razor. Ответ — страницы Razor. И по этой причине я использую @page. Мой первый вопрос был о том, как вставлять html-блоки в страницы Razor, и я получил ответ, используя Html.RenderPartial, который, как я понимаю из вашего комментария, является частью MVC. Затем это приводит меня к исходному вопросу: есть ли и как правильно вставлять html-блоки в чистые страницы Razor, которые используют @page, как предлагает Microsoft. Поэтому путаница   -  person Menahem Gil    schedule 19.12.2017
comment
@DavidG - Ваш первый комментарий спас мне день. Я искал это, и мне потребовалось 2 часа гугления. Ошибка/проблема заключается в том, что когда мы создаем новую частичную страницу в Visual Studio, она добавляет директиву @page даже для частичных типов страниц. Спасибо.   -  person surpavan    schedule 07.04.2019