VS2019新建Blazor Razor组件无法路由及渲染问题求助
解决Blazor Server中新建Todo组件无法路由/引用的问题
哇,这个问题确实挺诡异的!我之前也碰到过类似的情况,大概率不是你写的代码有问题,而是项目的命名冲突、编译缓存或者配置细节导致的,给你几个具体的排查和解决步骤:
排查同名类型/组件冲突
Blazor会把每个Razor组件编译成对应的C#类,如果你的项目里已经存在名为Todo的类(比如某个C#文件里定义了public class Todo { ... }),或者其他文件夹下也有一个Todo.razor组件,就会导致路由系统和组件引用混乱。- 可以用Visual Studio的查找所有引用功能(右键点击Todo.razor→查找所有引用),看看有没有其他地方出现了同名的类型。
- 先试试把
Todo.razor改名为TodoTest.razor,同时把@page "/todotest"也改了,启动项目访问/todotest,如果能正常访问,那就实锤是同名冲突了,这时候只需要把冲突的类型/组件重命名就行。
清理编译缓存并重建项目
Visual Studio的编译缓存有时候会抽风,导致新添加的组件没有被正确编译进去:- 右键点击解决方案→选择清理解决方案
- 然后右键点击解决方案→选择重建解决方案
- 也可以手动删除项目根目录下的
bin和obj文件夹,再重新编译项目
检查组件的命名空间和生成属性
- 确保
Todo.razor的命名空间是正确的,默认应该和Pages文件夹的命名空间一致(比如YourProjectName.Pages),可以在组件顶部添加@namespace YourProjectName.Pages来明确指定 - 右键点击
Todo.razor→选择属性,检查“生成操作”是否设置为RazorComponent,如果设置成了其他值(比如“内容”),组件就不会被编译成可识别的Blazor组件
- 确保
排查Azure AD B2C的授权拦截
因为你的项目是带Azure AD B2C身份验证的,有可能新建的组件被默认的授权策略拦截了:- 尝试在
Todo.razor顶部添加@attribute [AllowAnonymous],然后启动项目访问/todo,如果能正常访问,说明是授权策略的问题 - 这时候你可以调整
App.razor里的AuthorizeRouteView配置,或者给Todo组件添加合适的授权属性(比如[Authorize])来匹配你的业务需求
- 尝试在
检查组件引用的正确性
作为子组件引用时<Todo/>显示空白,而<Todo2/>正常,也侧面印证了命名冲突的可能:- 确保在引用
<Todo/>的组件(比如Index.razor)里,已经正确导入了Pages命名空间(比如顶部有@using YourProjectName.Pages),不过默认情况下Blazor会自动导入,所以这个概率不大,但也可以检查一下
- 确保在引用
按照上面的步骤逐一排查,应该就能解决这个诡异的问题了!
内容的提问来源于stack exchange,提问作者Ogglas
相关产品推荐
相关产品推荐

