从 .NET Core 2.2 升级到 .NET 5 后,部分视图不再获取视图数据

问题描述 投票:0回答:1

我正在努力将 Web 应用程序从 .NET Core 2.2 更新到 .NET 5。大多数事情都运行良好,但我陷入了部分视图。

该网站使用大量 Ajax 请求,大多数返回带有一些 HTML 的小部分视图。 partial中的所有变量信息都是通过视图数据设置的。

更新到 .NET 5 后,视图数据进入部分视图时为空。

例如,我返回部分“_mailbox”。在控制器中,您可以看到视图数据中有一些内容:

enter image description here

但是当我进入部分视图时,您可以看到它是空白的!在2.2中它被通过了:

enter image description here

基本功能:

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

您知道可能出了什么问题吗?我基本上只是按照 Microsoft 概述的步骤进行操作。

如何重现:

我开始了一个全新的项目来测试并遇到了同样的问题-

enter image description here enter image description here

添加新的 HTML 部分

_test.cshtml

enter image description here

添加新功能

index.cshtml.cs

enter image description here

然后运行网络应用程序时

https://localhost:44332/?Handler=test

我应该看到我的名字:
enter image description here

但它是空白的。调试和单步执行时,我看到视图数据未传递到视图。

其他信息:

  • 它适用于.NET Core 2.2.105。

  • 根据 Microsoft 文档,与 2.2 相同的语法应该适用于 5.1。然而,正如 Brando 张 指出的那样,您必须使用 .NET 2.1 中过时的语法才能完成这项工作。

  • 如果您阅读 .NET 5 的 Partial 函数的文档,它声称是

    Microsoft.AspNetCore.Mvc.RazorPages
    命名空间的一部分,但如果您尝试使用该命名空间,您会发现
    Partial
    不存在。 参见文档

enter image description here

这是一个错误吗?

c# asp.net-core razor-pages .net-5 asp.net-core-2.2
1个回答
1
投票

据我所知,返回的Partial是MVC函数结果而不是razor页面,如果你想使用razor页面的Partial结果,你应该自己构建。

更多详情,可以参考以下代码:

public IActionResult OnGetTest()
{

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


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

结果:

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.