c# - 从 Dotnet Core 2.2 升级到 Dotnet 5。Partials 不再获取 View Data
问题描述
原始问题
我正在努力将 webapp 从 dotnet core 2.2 更新到 dotnet 5。大多数事情都运行良好,但我被困在部分视图上。
该网站使用大量 Ajax 请求,并且大多数返回带有一些 html 的小部分视图。partial 中的所有变量信息都是通过 viewdata 设置的。
更新到 dotnet 5 后,视图数据进入部分为空。
例如,我要返回部分“_mailbox”。在控制器中,您可以看到我在 viewdata 中有东西:
但是当我踏入局部时,您会看到它是空白的!在 2.2 中它被通过了。
基本功能——
public ActionResult OnGetGetMailbox(int id)
{
ViewData["Fullname"] = "Christopher"
return Partial("_mailbox")
}
你有什么想法可能出了什么问题吗?我基本上只是按照Microsoft概述的步骤进行操作。
如何复制
所以我开始了一个全新的项目来测试并遇到同样的问题 -
添加一个新的 html 部分_test.cshtml
在中添加一个新函数index.cshtml.cs
然后在运行 webapp 时https://localhost:44332/?Handler=test
但它是空白的。在调试和单步执行时,我看到 viewdata 没有传递给视图。
其他信息
它适用于 Dotnet Core 2.2.105。
根据文档,与 2.2 相同的语法应该在 5.1 中工作。但是,正如@Brando Zhang 指出的那样,您必须使用 dotnet 2.1 中的过时语法才能完成这项工作。
如果您阅读 dotnet 5 的 Partial 函数的文档,它声称它是
Microsoft.AspNetCore.Mvc.RazorPages
命名空间的一部分,但如果您尝试使用该命名空间,您会发现Partial
它不存在。见文档
它是一个错误吗?
解决方案
据我所知,返回的 Partial 是 MVC 函数结果而不是 razor pages,如果你想使用 razor page 的 Partial 结果,你应该自己构建。
更多细节,您可以参考以下代码:
public IActionResult OnGetTest()
{
ViewData["Test"] = "test";
var partialView = "_test";
var partialViewResult = new PartialViewResult()
{
ViewName = partialView,
ViewData = ViewData
};
return partialViewResult;
}
结果:
推荐阅读
- javascript - 来自屏蔽输入文本的时刻 js 无效日期
- c++ - 无法手动调用 std::string 的析构函数
- c++ - 更改常量 Mat opencv 的值
- vuejs2 - 如何为 v-treeview 添加右键单击事件以在 vuetify 中打开菜单?
- java - MapReduce 项目的 Mapper 部分中的多个错误
- functional-programming - 捕获函数组合中参数的排序特征的术语
- java - 如何处理 FileSystemAlreadyExistsException?
- javascript - 如何检查 SET 和 WHERE 上是否存在文档
- javascript - Rotate picture according to Cursor move direction
- vuejs2 - Filter list by date and search through list