Blazor使用区域(Area)
在MVC中,我们经常使用区域(Area)来区分各个模块,比如后台我们可以写一个Admin的Area。
到了Blazor时代,已经不推荐这么做了,现在推荐的做法是通过Url来区分,比如Admin可以配置@page /Admin/Article,实现与原来Admin的Area差不多的用法。
但是有时候我们有需求在Blazor中使用Area。比如我的Jx.Cms,前台使用MVC,后台使用Blazor。由于两者相对独立,这里使用Area进行区分更加合适。这里我就借用Jx.Cms的代码来说一下如何创建一个Admin Area。
1、添加一个独立的razor文件,作为Blazor的启动页面。
在Jx.Cms中,我添加了一个AppStartup.razor文件,其代码如下:
@using Microsoft.AspNetCore.Components.Authorization
<BootstrapBlazorRoot>
<Router AppAssembly="typeof(Startup).Assembly">
<Found Context="routeData">
<AuthorizeRouteView RouteData="routeData">
<NotAuthorized>
<RedirectToLogin></RedirectToLogin>
</NotAuthorized>
</AuthorizeRouteView>
</Found>
<NotFound>
<h2>抱歉!找不到页面。</h2>
</NotFound>
</Router>
</BootstrapBlazorRoot>
@page "/Admin"
@using Jx.Cms.Web
@addTagHelper *,Microsoft.AspNetCore.Mvc.TagHelpers
<!DOCTYPE html>
<html lang="zh">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no" />
<title>后台管理 - JX.CMS</title>
<link rel="icon" href="favicon.ico" type="image/ico">
<meta name="author" content="JX">
<link rel="stylesheet" href="/_content/BootstrapBlazor/css/bootstrap.blazor.bundle.min.css">
<link rel="stylesheet" href="/_content/BootstrapBlazor.Markdown/css/bootstrap.blazor.markdown.min.css" />
<link rel="stylesheet" href="/Admin/css/font-awesome.min.css">
<link rel="stylesheet" href="/Jx.Cms.Web.styles.css">
<base href="~/Admin/" />
</head>
<body>
<component type="typeof(AppStartup)" render-mode="Server"/>
<script type="text/javascript" src="/_framework/blazor.server.js"></script>
<script src="/_content/BootstrapBlazor/js/bootstrap.blazor.bundle.min.js"></script>
<script src="/Admin/js/summernote-zh-CN.min.js"></script>
<script src="/_content/BootstrapBlazor.Markdown/js/bootstrap.blazor.markdown.min.js"></script>
</body>
</html>
这里面有两个地方需要注意,一个是<component type="typeof(AppStartup)" render-mode="Server"/>这里的AppStartup是第一步创建的AppStartup.razor,第一个就是<base href="~/Admin/">这里必须要写,基础路径要跟后面添加的Area一致,否则显示不出来。
endpoints.MapAreaControllerRoute("admin", "Admin", "/Admin/{controller=Home}/{action=Index}/{id?}");
endpoints.MapBlazorHub("~/Admin/_blazor");
endpoints.MapFallbackToAreaPage("~/Admin/{*clientroutes:nonfile}","/_AdminHost", "Admin");
这里需要注意的地方为MapFallbackToAreaPage里第一段的路径要与<base href="~/Admin/">对应起来。
@page "/Appearance"
@using Jx.Cms.Common.Attribute
@inject NavigationManager NavigationManager
@attribute [Menu(MenuIds.AppearanceId, "外观", "/Appearance", iconClass:"fa fa-newspaper-o")]
@code {
protected override void OnInitialized()
{
base.OnInitialized();
NavigationManager.NavigateTo("/Admin/Appearance/Theme");
}
}
这里的代码没有任何内容,就是注意两个地方即可,一是@page "/Appearance"里不能加/Admin,否则会报404,找不到页面。但是如果你用render-mode="ServerPrerendered"的话,开始的预渲染会报404,然后才显示正确的内容。
二就是NavigationManager.NavigateTo这个方法跳转的时候,是需要加上/Admin的。
这样就可以在Blazor中使用Area了。
感谢您的观看。
Blazor使用区域(Area)的更多相关文章
- Asp.Net MVC part4 异步、校验、区域Area
异步方式1:使用jquery的异步函数方式2:使用MVC的AjaxHelper行为的返回值设置:JsonResult对象,使用Json方法接收一个对象,在内部会完成对象的js序列化,向输出流中输出js ...
- MVC区域area
1.当项目业务比较庞大,可以通过区域来分拆. 2.添加区域时,默认会生成一下文件. 3.Application_Start()必需含有AreaRegistration.RegisterAllAreas ...
- ASP.NET MVC 右键点击添加没有区域(Area)、控制器、试图等选项
在MVC项目中准备添加控制器.区域时发现没有控制器这个选项,当时没有在意以为VS出问题了,网上所搜了一下,有人说没有安装:Microsoft.AspNet.Mvc或者需要升级. 本次的解决如下: 1) ...
- MVC5 Api Area 区域
到Area区分不同的模块让项目结构更加的清晰 TODO 步骤如下: 项目 –> 添加 -> 区域 (Area) 添加路由规则 public static class WebApiConfi ...
- ASP.NET MVC Area 区域
大型网站或项目通常有很多子系统或功能模块,如大型网站可能包含酒店.旅游.机票子系统,通过二级域名来访问,或者一个网站的前台和后台模块,每个团队负责某一子系统或模块,为了各团队进行协同开发,我们可以分不 ...
- mvc Area(区域)相关技术
ASP.NET MVC中,是依靠某些文件夹以及类的固定命名规则去组织model实体层,views视图层和控制层的.如果是大规模的应用程序,经常会由不同功能的模块组成,而每个功能模块都由MVC中的三层所 ...
- MVC 添加Area
在MVC项目中经常会使用到Area来分开不同的模块让项目结构更加的清晰. 步骤如下: 项目 –> 添加 -> 区域 ( Area ) 输入 Admin 添加成功后 Area包含: 创建一个 ...
- ASP.Net MVC开发基础学习笔记:五、区域、模板页与WebAPI初步
一.区域—麻雀虽小,五脏俱全的迷你MVC项目 1.1 Area的兴起 为了方便大规模网站中的管理大量文件,在ASP.NET MVC 2.0版本中引入了一个新概念—区域(Area). 在项目上右击创建新 ...
- Nancy之区域和分部视图的使用
一.前言 在MVC中,区域(Area)和分部视图(PartialView)应该是我们用的十分频繁的两个东西 今天我们就在Nancy中,把这两个东西简单的用起来! 二.简单使用之区域 区域,无论是对 ...
随机推荐
- python3判断一个数是否为素数
while True: num = int(input('请输入一个数:')) for i in range(2,num):#判断在num之前的数能不能把num整除 if(num%i == 0): p ...
- 【KiCad镜像】下载与安装
镜像下载.域名解析.时间同步请点击 阿里云开源镜像站 一.KiCad介绍 KiCad EDA 是一款用于印刷电路板设计的开源自由软件,基于 GPLv3 开源协议. 软件包含工程项目管理.原理图设计.线 ...
- RDMA--libibverbs代码分析(2)-设备发现
基于上一篇文章https://www.cnblogs.com/xingmuxin/p/11057845.html 我们现在从分析libibverbs代码,跳入到分析内核代码,代码位置在./driver ...
- bitsadmin windwos自带下载命令
bitsadmin的四种下载文件的方法 一. bitsadmin /rawreturn /transfer getfile http://qianxiao996.cn/1.txt c:\1.txt 二 ...
- loj6077. 「2017 山东一轮集训 Day7」逆序对
题目描述: loj 题解: 容斥+生成函数. 考虑加入的第$i$个元素对结果的贡献是$[0,i-1]$,我们可以列出生成函数. 长这样:$(1)*(1+x)*(1+x+x^2)*--*(1+x+x^2 ...
- windows配置jdk环境变量、mysql环境变量、tomcat环境变量、maven环境变量、git环境变量、node环境变量
一.windows配置各种环境变量后 path 路径下的目录: 二.windows 配置各种环境变量的目的: 为windows系统添加上各种环境对应的命令 举例,为什么要添加jdk的bin目录,是因为 ...
- HTTP发展史,HTTP1.1与HTTP2.0的区别
前言 我们知道HTTP是浏览器中最重要且使用最多的协议,它不仅是浏览器与服务端的通信语言,更是互联网的基石.随着浏览器的不断更新迭代,HTTP为了适应技术的更新也在不断进化,学习HTTP的最佳途径就是 ...
- 什么是tar 命令?
用来压缩和解压文件.tar 本身不具有压缩功能,只具有打包功能,有关压缩及解压是调用其它的功能来完成.弄清两个概念:打包和压缩.打包是指将一大堆文件或目录变成一个总的文件:压缩则是将一个大的文件通过一 ...
- Java有没有goto?
goto是Java中的保留字,暂时还不是Java的关键字.
- jQuery对象的创建
1.js类库 JavaScript封装了很多的预定义的对象和实用函数,能帮助使用者建立有高难度交互 客户端页面,并且兼容各大浏览器.跑在浏览器,请求服务器 当前比较流行的js库: jquery EXT ...