.NET Core 5 中ViewComponent的cshtml文件Model始终为null问题求助
问题根因与解决方法
核心问题原因
你的ViewComponent对应的cshtml文件顶部错误添加了@page指令。@page是Razor Pages的专属指令,添加该指令的cshtml文件会被框架识别为独立可路由的页面,而非ViewComponent的局部视图,此时框架不会将你在InvokeAsync方法中传给View()的参数绑定到Model对象上,最终导致访问Model时返回null。
修复步骤
- 直接删除cshtml文件第一行的
@page指令即可解决问题
修复后的cshtml代码参考:
@model bool @if (Model) { <link href="assets/css/style.dark.bundle.css" rel="stylesheet" /> <link href="assets/plugins/global/plugins.dark.bundle.css" rel="stylesheet" /> } else { <link href="assets/css/style.bundle.css" rel="stylesheet" /> <link href="assets/plugins/global/plugins.bundle.css" rel="stylesheet" /> }
额外注意事项
- ViewComponent的视图不需要
@page指令,也不需要手动指定路由,只要放在约定的目录下(比如Pages/Components/{组件名}/Default.cshtml或者Views/Shared/Components/{组件名}/Default.cshtml)即可正常被调用 - 你报错信息中出现了
Model.Value的调用逻辑,如果你声明的Model是不可空值类型bool不需要使用Value属性访问,只有可空值类型bool?才需要调用Value,如果删除@page后仍有报错可以检查@model的声明是否符合预期
内容的提问来源于stack exchange,提问作者Edika
相关产品推荐
相关产品推荐

