You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

VS2019新建Blazor Razor组件无法路由及渲染问题求助

解决Blazor Server中新建Todo组件无法路由/引用的问题

哇,这个问题确实挺诡异的!我之前也碰到过类似的情况,大概率不是你写的代码有问题,而是项目的命名冲突、编译缓存或者配置细节导致的,给你几个具体的排查和解决步骤:

  1. 排查同名类型/组件冲突
    Blazor会把每个Razor组件编译成对应的C#类,如果你的项目里已经存在名为Todo的类(比如某个C#文件里定义了public class Todo { ... }),或者其他文件夹下也有一个Todo.razor组件,就会导致路由系统和组件引用混乱。

    • 可以用Visual Studio的查找所有引用功能(右键点击Todo.razor→查找所有引用),看看有没有其他地方出现了同名的类型。
    • 先试试把Todo.razor改名为TodoTest.razor,同时把@page "/todotest"也改了,启动项目访问/todotest,如果能正常访问,那就实锤是同名冲突了,这时候只需要把冲突的类型/组件重命名就行。
  2. 清理编译缓存并重建项目
    Visual Studio的编译缓存有时候会抽风,导致新添加的组件没有被正确编译进去:

    • 右键点击解决方案→选择清理解决方案
    • 然后右键点击解决方案→选择重建解决方案
    • 也可以手动删除项目根目录下的bin和obj文件夹,再重新编译项目
  3. 检查组件的命名空间和生成属性

    • 确保Todo.razor的命名空间是正确的,默认应该和Pages文件夹的命名空间一致(比如YourProjectName.Pages),可以在组件顶部添加@namespace YourProjectName.Pages来明确指定
    • 右键点击Todo.razor→选择属性,检查“生成操作”是否设置为RazorComponent,如果设置成了其他值(比如“内容”),组件就不会被编译成可识别的Blazor组件
  4. 排查Azure AD B2C的授权拦截
    因为你的项目是带Azure AD B2C身份验证的,有可能新建的组件被默认的授权策略拦截了:

    • 尝试在Todo.razor顶部添加@attribute [AllowAnonymous],然后启动项目访问/todo,如果能正常访问,说明是授权策略的问题
    • 这时候你可以调整App.razor里的AuthorizeRouteView配置,或者给Todo组件添加合适的授权属性(比如[Authorize])来匹配你的业务需求
  5. 检查组件引用的正确性
    作为子组件引用时<Todo/>显示空白,而<Todo2/>正常,也侧面印证了命名冲突的可能:

    • 确保在引用<Todo/>的组件(比如Index.razor)里,已经正确导入了Pages命名空间(比如顶部有@using YourProjectName.Pages),不过默认情况下Blazor会自动导入,所以这个概率不大,但也可以检查一下

按照上面的步骤逐一排查,应该就能解决这个诡异的问题了!

内容的提问来源于stack exchange,提问作者Ogglas

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.07 09:18:13