You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Blazor Server应用中使用Razor Pages(cshtml)布局缺失问题求助

解决Blazor Server中Razor Page无布局、CSS的问题

嘿,作为从NodeJS转来的Blazor新手,你碰到的这个问题其实是Blazor组件(.razor)和传统Razor Pages(.cshtml)的核心体系差异导致的,这是很多刚接触Blazor的开发者都会踩的小坑,我来给你拆解清楚并提供解决方案:

为什么会出现这个差异?

Blazor Server项目里的.razor组件是SPA体系的一部分,默认会自动继承项目的Blazor布局(比如MainLayout.razor),共享全局CSS和Blazor的路由系统,所以你访问.razor页面时菜单、布局都正常。

.cshtml是传统ASP.NET Core Razor Pages的文件,它有一套独立于Blazor的布局、路由和资源加载体系,默认不会和Blazor的SPA布局共用,这就导致你打开.cshtml时只有纯内容,没有样式和导航。

具体解决方案

方案1:给Razor Pages指定全局布局

如果你需要保留.cshtml文件,可以手动给它指定项目的全局布局,让它加载CSS和导航菜单:

  1. 在你的.cshtml页面顶部添加布局引用:
    @page "/test/yourpage"
    @{
        // 指定使用项目的全局Razor布局(默认在Pages/_Layout.cshtml)
        Layout = "_Layout";
    }
    
  2. 或者在Test目录下新建一个_ViewStart.cshtml文件,让该目录下所有Razor Pages自动继承布局:
    @{
        Layout = "_Layout";
    }
    

这样设置后,你的Razor Pages就能加载全局CSS和布局了,超链接也会正常解析。

方案2:改用Blazor组件替代Razor Pages

既然你是在做Blazor Server项目,更推荐的方式是把CRUD相关的页面都改成.razor组件:

  • 这样所有页面都会自动继承Blazor的MainLayout,无需额外配置布局和CSS
  • 路由、导航和SPA体验会更统一,符合Blazor的开发模式
  • 现在很多EF相关的代码生成工具也支持直接生成Blazor组件(比如Visual Studio的“添加 -> 新搭建的项”里选择Blazor组件的CRUD模板)

额外建议

  • 尽量避免在Blazor Server项目中混合使用.razor组件和.cshtml页面,两套体系混合容易出现路由冲突、资源加载不一致的问题
  • 如果你之前用EF生成的是Razor Pages,可以把页面内容迁移到Blazor组件中,只需要调整语法(比如把Razor Pages的@model改成Blazor的@inject和绑定逻辑,把表单提交改成Blazor的事件处理)

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

火山引擎 最新活动