将视图转为image_C# .NetCore3.1 系列教程MVC视图(View)及标记帮助器(TagHelper)的使用入门...

9ebd16327194f90bc95c5e2867d01779.gif

视图简介

在 ASP.NET MVC 应用程序中,所有传入的请求均由控制器处理,并将这些请求映射到控制器相应的方法上

控制器方法可能会返回一个视图,也可能执行其它类型的操作,例如重定向到另一个控制器方法上

如果使用 MVC 框架,最流行的创建 HTML 的方法是使用 ASP.NET MVC 的 Razor 视图引擎

为了使用 Razor 视图引擎,一个控制器方法将产生一个 ViewResult (实现IActionResult接口)对象,而一个 ViewResult 可以携带我们想要使用的 Razor 视图的名称。

即我们可以在控制器中组装数据,再将数据通过Model绑定或ViewBag、ViewData对象将组装的数据返传递给View,之后控制器将View(中的Html)返回给浏览器。

其过程如下:

f27cfc33acadddcb59abd504194b84aa.png

控制器决定返回哪个视图、视图中的数据是什么样,而最终响应给浏览器的HTML代码是根据视图进行生成的。

创建一个视图

DeptController下有名为”Index“、”Add“的Action,他们均需要返回一个ViewResu则我们目录结构图下图所示:

5cbcdd3e740fb5005ac7175684c0e4f6.png

在cshtml文件中我们可以直接使用Html代码进行编写,结构同Html结构

e5325b372fb38d8b14475b91b7019410.png

此时运行程序并访问Action就会加载刚才你写的视图页面

使用Razor布局解决视图公共部分

比如我们的系统使用如下图所示的圣杯布局

fa2c69cfe6e86fdd61699c1d60d7bde8.png

除登录页外所有页面面的header、left、right、footer部分都相同,只有center部分根据不同页面显示不同内容。

如果我们不使用Razor布局,也可以使用iframe的方式进行引入,但这种方式存在一些弊端,比如以下几种:

  1. 第一次打开页面是浏览器需要多次向服务器请求页面内容,存在一定开销

  2. 我们没有办法将其中某一页的地址发给其他人打开,如果直接打开center部分的页面则header、left、right、footer这些部分的内容不会显示(除非你使用URL重写或将center部分地址带入到)。

  3. 必须控制center部分的页面能被哪些域嵌入,否则可能存在xss攻击的风险,因为parent页可以取到iframe中的cookies信息并修改页面的html代码内容。

因此我们可以考虑在每个视图中单独呈现这些公共部分,但每个页手动编写存在工作量大、修改麻烦(一旦一个地方需要改动,可能每个视图都得修改)。

好在,mvc为我们提供了一套解决方案,即”Razor布局“。
我们在上文提到的Views目录下再新建一个"shared"目录,在"shared"目录新建一个视图布局,名为_Layout.cshtml

93795e5f05700f287e5f0d6c66a7dc15.png

之后打开这个Razor布局文件,我们可以将html的公共部分写在这个文件里,然后每个页需要展示不同信息的地方(如center部分)写如下代码

69d9930e223b52bde6a217a70e0894ea.png

然后我们再为控制器中的每个Action创建各自的视图,此时,请注意,因为公共部分已经写到了Razor布局文件,每个视图生成Html时都会有这些部分,因为、等标签是不需要在写的,我们只要在这些视图中写上要放在id为"mainFrame"的DIV中的内容即可

如Dept/Index的视图里面的代码:

a0dc4e8cd4d0a606c9b60d3fb48af6b6.png

当然我们需要在各个action的视图中标明他需要使用哪个公共布局,即在视图的最顶部加上以下代码:

9801ec7eed8b2954136fcb46aac68f8d.png

利用Razor视图开始(ViewStart)批量配置布局

当有非常多视图都需要引入相同的布局时,我们可以按上面的方法在每个试图单独写Layout=”*****“,也可以使用Razor视图开始,在Razor视图开始中编写的引用在其作用域下所

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值