技术细节:
- 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 -不工作,文件从未打开/读取的程序.
1条答案
按热度按时间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”类的任何内容。