Обновлен с Dotnet Core 2.2 до Dotnet 5. Частичные данные больше не получают View Data.

Исходная проблема

Я работаю над обновлением веб-приложения с dotnet core 2.2 до dotnet 5. Большинство вещей работает довольно хорошо, но я застрял на частичных представлениях.

Веб-сайт использует массу запросов Ajax, и большинство из них возвращает небольшой частичный вид с некоторым количеством html. Вся переменная информация в partial была установлена ​​через viewdata.

После обновления до dotnet 5 данные представления входят в партиал как пустые.

Например, я возвращаю частичный _mailbox. В контроллере вы можете видеть, что у меня есть данные в представлении:

введите здесь описание изображения

но когда я вхожу в частичное, вы видите, что оно пустое! В 2.2 это было пройдено.

введите здесь описание изображения

Основная функция -

public ActionResult OnGetGetMailbox(int id)
{
  ViewData["Fullname"] = "Christopher"
  return Partial("_mailbox")
}

У вас есть идеи, что могло пойти не так? Я просто выполнил шаги, описанные в Майкрософт.

Как воспроизвести

Итак, я начал новый проект для тестирования и столкнулся с той же проблемой -

введите здесь описание изображения введите здесь описание изображения

Добавить новый партиал html _test.cshtml

введите здесь описание изображения

Добавить новую функцию в index.cshtml.cs

введите здесь описание изображения

Затем при запуске веб-приложения https://localhost:44332/?Handler=test

Я должен увидеть свое имя - введите здесь описание изображения

Но он пустой. При отладке и прохождении я вижу, что данные просмотра не передаются в представление.

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

  • Работает в Dotnet Core 2.2.105.

  • согласно docs тот же синтаксис, что и в 2.2, должен работать в 5.1. Однако, как указал @Brando Zhang, вам нужно использовать устаревший синтаксис из dotnet 2.1, чтобы это работало.

  • Если вы прочтете документацию по функции Partial для dotnet 5, она утверждает, что является частью пространства имен Microsoft.AspNetCore.Mvc.RazorPages, но если вы попытаетесь использовать это пространство имен, вы обнаружите, что Partial не существует. см. документы

введите здесь описание изображения

Это ошибка?


person sur.la.route    schedule 24.02.2021    source источник
comment
По вашему описанию, я создал тестовую демку на своей стороне, она работает хорошо. Я мог получить результат. Изображение. Вы устали создавать новый проект .net 5 и тестировать его?   -  person Brando Zhang    schedule 24.02.2021
comment
@BrandoZhang спасибо, что нашли время сделать демонстрацию. Я также создал отдельный проект, но не прошел партиалы. Вот ссылки на мой стартап, проект и .csproj, интересно, чем они отличались от ваших? Они точно соответствуют (кроме дополнительных пакетов) тому, что сейчас по умолчанию! csproj startup.cs project.cs   -  person sur.la.route    schedule 24.02.2021
comment
@BrandoZhang Я добавил шаги для воспроизведения с новой демонстрацией. Это делает то же самое для вас? Спасибо!   -  person sur.la.route    schedule 24.02.2021


Ответы (1)


Насколько я знаю, возвращаемый частичный результат является результатом функции MVC, а не бритвенными страницами, если вы хотите использовать частичный результат бритвенной страницы, вы должны создать его самостоятельно.

Более подробную информацию вы можете найти в приведенных ниже кодах:

    public IActionResult OnGetTest()
    {

        ViewData["Test"] = "test";
        var partialView = "_test";


        var partialViewResult = new PartialViewResult()
        {
            ViewName = partialView,
            ViewData = ViewData
        };
        return partialViewResult;
    }   

Результат:

введите здесь описание изображения

person Brando Zhang    schedule 25.02.2021
comment
но если я выполню точные шаги для воспроизведения с использованием SDK DotNet core 2.2 вместо 3.1 или 5.0, это сработает :( - person sur.la.route; 25.02.2021
comment
но вы тоже правы, я полагаю, это единственный способ заставить его работать в 3.1 и 5. Еще одна победа Microsoft, лол - person sur.la.route; 25.02.2021
comment
из docs кажется, что не должно было быть изменений с 2.2 на 3.1 или 5, а синтаксис, который вы нашли работающим, взят из dotnet ‹= 2.1? - person sur.la.route; 25.02.2021