ABP.IO MVC/Razor模板仅覆盖Login.cshtml报LoginModel未注册错误如何解决
ABP.IO仅覆盖登录页cshtml报LoginModel未注册的解决方法
错误原因
你仅复制了Login.cshtml视图文件,但视图头部默认的@model声明绑定了当前项目命名空间下的LoginModel类,你本地没有创建该类也没有显式指定使用ABP内置的LoginModel,运行时依赖注入容器找不到对应服务就会抛出未注册异常。
解决步骤
步骤1:修正视图头部指令
你无需创建本地的
Login.cshtml.cs后端类,仅需修改Login.cshtml的头部内容,显式指定Model为ABP官方内置类型:@page @model Volo.Abp.Account.Web.Pages.Account.LoginModel @addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers @addTagHelper *, Volo.Abp.AspNetCore.Mvc.UI注意删除视图头部多余的
@namespace、@inherits声明,避免绑定到本地类型。步骤2:匹配视图版本
你下载的
Login.cshtml版本需要和项目引用的ABP框架版本完全一致,不要直接使用dev分支的最新代码,避免视图和内置Model的属性不匹配。步骤3:确认虚拟文件系统配置
确保你的Web项目模块类的
ConfigureServices方法中已配置虚拟文件系统,允许本地物理文件覆盖内置模块的虚拟视图:public override void ConfigureServices(ServiceConfigurationContext context) { // 其他配置... Configure<AbpVirtualFileSystemOptions>(options => { options.FileSets.AddPhysical("Pages"); }); }
验证
修改完成后清理项目、重新编译运行,登录页会加载你自定义的cshtml视图,底层逻辑仍复用ABP内置实现,不会再抛出服务未注册异常。
内容的提问来源于stack exchange,提问作者Asrar Makrani
相关产品推荐
相关产品推荐

