探索ASP.NET MVC5系列之~~~2.视图篇(上)---包含XSS防御和异步分部视图的处理

简介: 其实任何资料里面的任何知识点都无所谓,都是不重要的,重要的是学习方法,自行摸索的过程(不妥之处欢迎指正) 汇总:http://www.cnblogs.com/dunitian/p/4822808.html#mvc 本章Demo:https://github.

其实任何资料里面的任何知识点都无所谓,都是不重要的,重要的是学习方法,自行摸索的过程不妥之处欢迎指正

汇总:http://www.cnblogs.com/dunitian/p/4822808.html#mvc

本章Demohttps://github.com/dunitian/LoTCodeBase/blob/master/NetCode/6.网页基础/BMVC5/MVC5Base/Controllers/IndexController.cs

本章Demo:https://github.com/dunitian/LoTCodeBase/blob/master/NetCode/6.网页基础/BMVC5/MVC5Base/Controllers/LayController.cs

xss防御:http://www.cnblogs.com/dunitian/p/5722370.html#xss

4.共用其他视图

不同控制器渲染同一个视图文件。这个应用场景还是比较多的,比如同样是Article的集合,一个是显示最新文章列表,一个是显示文章列表,一个是显示编辑推荐文章列表,基本上都是<ul><li></li></ul>这种结构,那么是不是可以把这种的View弄一个共用视图出来呢?

案例:

技能点讲解:先看效果:

同一个视图

 return View("~/Views/Index/Index.cshtml");

5.强类型视图(常用命名空间可以定义在Views下的Web.Config

通过ViewBag传递少量数据的确用的爽,我也挺喜欢这样的。但是处理数据的时候就特别麻烦了(ViewBag是弱类型的,不能点出我们需要的属性),这时候强类型就油然而生了~~~

扩展:动态值不能作为参数传递给扩展方法(C#编译器在编译的时候为了选择正确的扩展方法肯定是需要其真正类型的)【你传参数用var类型的传着试试~~】

效果:

代码部分:

Model:

控制器:

视图:

常用命名空间可以设置在Views的web.config中,eg:

 6.Razor的简单接触(内含XSS防御)

初次接触XSS: http://www.cnblogs.com/dunitian/p/5286772.html

说下Html和Javascript的Xss防御

Razor表达式是用HTML自动编码的,我们来看这个例子:

是不是突然感觉到微软其实为我们做了很多准备,操了很多心?有木有,这些安全意识很多人都是没有的

如果你把用户的输入用Html.Raw的方式显示,那就坑爹了(尽量避免这种方式,至少用户输入的不能用这种)

--------------------------------------------------------------------------------------------------

下面演示一下项目中Ajax的方式

用户输入变个方式不就绕过验证了吗

解决方法:@Ajax.JavaScriptStringEncode(ViewBag.Test2)

应用建议:Html.Encode(),@Ajax.JavaScriptStringEncode()

--------------------------------------------------------------------------------------------------------

如果你觉得万事大捷,呃。。。。

下面说下URL的XSS防御:(这个主要是一些自定义的模板引擎或者静态页面或者Aspx页面需要当心)

原理说一下:比如你是一个接受用户的超链接:<a href="http://www.dkill.net?mmd=ddf">什么鬼?</a>

如果用户mmd输入的是这个构造呢?===> "></a><script src="//cdn.bootcss.com/jquery/1.10.2/jquery.min.js"></script><a>

想一想,为什么这样构造?==》这样构造不影响他正常使用,那发现的几率就小了

解决方法:Url.Encode

诸如这种的写法以后就不要出现了,如果是因为带了特殊符号而传不过来可以编码后再传

 

如果你的视图是aspx的记得过滤HTMLJSURL~基本上问题都出在这

 

推荐使用:AntiXSS

 

7.布局系列

 1._ViewStart

MVC5以前都是要手动引用母版页

自从MVC5有了_ViewStart.cshtml,感觉整个春天都来了

视图都不需要引用”母版页“了(默认就全部引用了_Layout)

 

2.RenderSection~~呈现特别的节部分

一般不推荐这么写:

 

如果子页面没有定义Footer的节,那么就报错了

其他两种写法:子页中定义了Footer就显示子页的,没有定义就显示默认

另一种方式(逆天用的比较多):@RenderSection("Footer", false)

3.@RenderBody() 呈现子页的主体内容

--------------------------------------------------------------------

4.部分视图(主要就是Html.Partial 、 Html.RenderPartial、Html.RenderAction

先说下这两个的区别:Html.Partial 和 Html.RenderPartial

效果:(Html.Partial直接显示视图部分,不经过控制器

再说下Html.RenderPartial 和 Html.RenderAction

RenderPartia l咋一看和 RenderAction 差不多,但===》(RenderPartia 我不怎么用,感谢2楼朋友指正错误

来看例子:

 

 而RenderAction却可以显示:

-------------------------------------

重头戏来了~那么对于异步咋办呢?怎么就报错了呢?(参考我的这个文章:http://www.cnblogs.com/dunitian/p/5481138.html

可能有些人还不知道“异步是什么鬼”,呃呃。。。

好吧,举个例子,具体的不在本文研究之中,可以自信搜索或者关注后续的文章

步入正轨,继续我们的分部视图讲解:

控制器部分:

视图:

调用:

有时候你这样写也不会报错,那是因为你没有的异步等待没有被阻止,或者你版本比较高

 分部视图推荐写法:

@{Html.RenderAction("xx", "xxx");}

Html.Partial 推荐应用场景:Seo,CSS,Script

 

参考:http://www.2cto.com/Article/201201/115876.html

http://blog.csdn.net/jingmeifeng/article/details/7788603

作者: 毒逆天
打赏: 18i4JpL6g54yAPAefdtgqwRrZ43YJwAV5z
本文版权归作者和博客园共有。欢迎转载,但必须保留此段声明,且在文章页面明显位置给出原文连接!
目录
相关文章
|
9天前
|
网络协议 Unix Linux
一个.NET开源、快速、低延迟的异步套接字服务器和客户端库
一个.NET开源、快速、低延迟的异步套接字服务器和客户端库
|
1月前
|
开发框架 前端开发 JavaScript
ASP.NET MVC 教程
ASP.NET 是一个使用 HTML、CSS、JavaScript 和服务器脚本创建网页和网站的开发框架。
34 7
|
1月前
|
存储 开发框架 前端开发
ASP.NET MVC 迅速集成 SignalR
ASP.NET MVC 迅速集成 SignalR
47 0
|
2月前
|
开发框架 前端开发 .NET
ASP.NET MVC WebApi 接口返回 JOSN 日期格式化 date format
ASP.NET MVC WebApi 接口返回 JOSN 日期格式化 date format
40 0
|
2月前
|
开发框架 前端开发 安全
ASP.NET MVC 如何使用 Form Authentication?
ASP.NET MVC 如何使用 Form Authentication?
|
2月前
|
开发框架 .NET
Asp.Net Core 使用X.PagedList.Mvc.Core分页 & 搜索
Asp.Net Core 使用X.PagedList.Mvc.Core分页 & 搜索
104 0
|
5月前
|
开发框架 前端开发 .NET
ASP.NET CORE 3.1 MVC“指定的网络名不再可用\企图在不存在的网络连接上进行操作”的问题解决过程
ASP.NET CORE 3.1 MVC“指定的网络名不再可用\企图在不存在的网络连接上进行操作”的问题解决过程
169 0
|
4月前
|
SQL 设计模式 开发框架
.NET异步有多少种实现方式?(异步编程提高系统性能、改善用户体验)
想要知道.NET异步有多少种实现方式,首先我们要知道.NET提供的执行异步操作的三种模式,然后再去了解.NET异步实现的四种方式。
|
5月前
|
开发框架 前端开发 JavaScript
JavaScript云LIS系统源码ASP.NET CORE 3.1 MVC + SQLserver + Redis医院实验室信息系统源码 医院云LIS系统源码
实验室信息系统(Laboratory Information System,缩写LIS)是一类用来处理实验室过程信息的软件,云LIS系统围绕临床,云LIS系统将与云HIS系统建立起高度的业务整合,以体现“以病人为中心”的设计理念,优化就诊流程,方便患者就医。
73 0
|
5月前
|
开发框架 前端开发 .NET
C# .NET面试系列六:ASP.NET MVC
<h2>ASP.NET MVC #### 1. MVC 中的 TempData\ViewBag\ViewData 区别? 在ASP.NET MVC中,TempData、ViewBag 和 ViewData 都是用于在控制器和视图之间传递数据的机制,但它们有一些区别。 <b>TempData:</b> 1、生命周期 ```c# TempData 的生命周期是短暂的,数据只在当前请求和下一次请求之间有效。一旦数据被读取,它就会被标记为已读,下一次请求时就会被清除。 ``` 2、用途 ```c# 主要用于在两个动作之间传递数据,例如在一个动作中设置 TempData,然后在重定向到另
300 5