asp.net 使用模型创建Razor页面时,ViewData字段始终为空

zi8p0yeb  于 2023-10-21  发布在  .NET
关注(0)|答案(1)|浏览(171)

技术细节

  • VS Enterprise 2022 17.3.2
  • dotNET 7
  • 项目类型:ASP dotNET Core Web App MVC
    • 空测试项目,所有设置设置为默认值 *
      我有
  • 控制器文件夹中的“AdminController”,包含默认的“public Iconstruct Result Index()”方法(在选择“空”控制器模板时创建)
  • 子文件夹“管理员”内的“视图”和剃刀页“索引”(空模板)在该文件夹中。页面包含下一个代码:
@page
@model WebApplication1.Views.Admin.IndexModel
@{
    ViewData["Title"] = "Manage users";
}
  • 此页面的模型有下一个内容:
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.RazorPages;

namespace WebApplication1.Views.Admin
{
    public class IndexModel : PageModel
    {
        public IActionResult OnGet()
        {
            return Page();
        }
    }
}

Issue:启动项目并打开localhost/Admin时出现错误:AspNetCoreGeneratedDocument.Views_Admin_Index.ViewData.get returned null.
有一个解决办法,我必须在'AdminController.cs'中的public IActionResult Index()中设置ViewData["Title"] = "titlehere";,但这不是事情应该如何工作,需要一个适当的解决方案。有什么想法吗?

我做了一点调试,发现:

  • “ViewData = null”--在加载/Admin/Index时
  • “ViewData =(some object)”--在/Index或/Home/Index的情况下(即默认启动页面)无论出于何种原因,“_Layout.cshtml”不会影响“Admin”子文件夹内的页面,但当完全相同的布局应用于“Home”子文件夹页面时,View完全可以运行。
    我试过
  • 清理浏览器缓存和网站数据为“localhost”-没有工作
  • 设置“布局=路径到布局文件”内索引.cshtml -不工作,文件从未打开/读取的程序.
twh00eeo

twh00eeo1#

正如Microsoft ASP.NET Core官方文档中所述:
@page使文件成为MVC动作,这意味着它直接处理请求,而不通过控制器。@page必须是页面上的第一个Razor指令。@page会影响其他Razor构造的行为。

解决方案:删除@page标记在你的.cshtml文件.
UPD:经过几个小时的努力工作,我决定这是一个好主意,不使用剃刀页面沿着与MVC(不管现有的说,在官方微软DLL脚手架页面在帐户管理视图)。

如果您尝试访问“cshtml”(“View”)中的“.cshtml.cs”@Model,它将始终为null。
您可以通过将项目类型更改为ASP dotNET Core(无MVC)来解决此问题。

示例2:您仍然可以使用自定义模型,只是不要继承“PageModel”类的任何内容。

相关问题