MVC架构模式常见问题
1、MVC的路由选择功能是帮你定义一个URL规则,映射URL到控制器。在“global.asax“文件中写路由映射表。
2、可以映射多个URL到同一个映射,只需要添加多条不同Key名字的记录,并且指定同样的控制器和动作。
3、使用hyperlink生成连接,可以通过使用ActionLink方法从一个视图链接到另一个视图。
4、在MVC中可以通过tempdata,viewdata和viewbag来保持sessions。
- Temp data -在不同的控制器或动作间转换时保持数据。另外,进行页面转向时,tempdata可以保持数据。它是一个内部的Session变量。
- View data - 可以在控制器和视图间保持数据。
- View Bag - 它是视图数据的动态包装。使用Viewbag不需要类型转换。它使用的是内部动态关健词。
5、在MVC中可以使用数据注释(早期版本)和数据模型的属性标签来做输入验证。
6、使用Html helper类中的ValidationSummary方法可以一次显示所有错误信息。
7、启用客户端验证:第一步引用必须的jQuery文件;第二步去调用EnableClientValidation方法。
8、MVC中的Razor是一个轻量级的视图引擎,MVC最初只有一个ASPX的视图类型,直到MVC3才引进了Razor。相比于ASPX,Razor是干净的、轻量级的和语法更简单的。
9、MVC中可以使用Windows或Forms做授权和认证,通过修改web.config文件,并设置验证模式为Windows可以去执行Windows认证。
10、MVC中有两种方式可以执行AJAX:AJAX libraries;jQuery。
MVC中的十二种结果类型中比较主要的有ActionResult,ViewResult,JsonResult。
MVC中的12种结果类型,最主要的是ActionResult类,它是一个基础类,它有11个子类型,如下:
- ViewResult - 给响应流渲染指定的视图
- PartialViewResult - 给响应流渲染指定的局部视图
- EmptyResult - 返回空的响应结果。
- RedirectResult - 执行一个HTTP转向到指定的URL。
- RedirectToRouteResult - 执行一个HTTP转向到一个URL,这个URL由基于 路由数据的路由引擎来决定
- JsonResult - 序列化一个ViewData对像到JSON格式。
- JavaScriptResult - 返回一段Javascript代码,它可以在客户端执行。
- ContentResult - 写内容到响应流,不需要视图支持。
- FileContentResult - 返回一个文件到客户端。
- FileStreamResult - 返回一个文件到客户端,它提供的是流。
- FilePathResult - 返回一个文件到客户端。
11、MVC中的ActionFilters可以帮助你在MVC action执行中或执行后,执行一些逻辑。
Action filters通常用在下面的场景中:
- 在action发生前,执行POST logic before the action happens.
- 取消一个当前的执行。
- 检查返回值。
- 给action提供特殊的数据。
你有两种方式创建action filters:
- 内联action filter.
- 创建一个ActionFilter属性.
创建内联action filter,我们需要执行 IActionFilter 接口。 ActionFilter 接口有两个方法:OnActionExecuted 和 OnActionExecuting。在这两个方法中我们可以执行预处理逻辑或取消逻辑。
12、MVC中可以创建自定义的视图引擎, 步骤如下:
(1)需要创建一个类去执行IView接口。我们应该在这个类的render函数中写一些逻辑,指明如何渲染视图
(2)我们需要创建一个类,它继承 VirtualPathProviderViewEngine ,并且我们需要提供一个文件夹路径和视图文件扩展名。例如,Razor是“cshtml”,aspx是“.aspx”。
(3) 需要注册自定义视图到视图集合。注册自定义视图引擎最适合的地方是global.aspx文件中的 ViewEngines 集合。
13、WebAPI是一个通过HTTP方式公开数据的技术,跟随REST规则,相比于SOAP,它是轻量级的,只有需要的信息被传递,WebAPI的输出是简单的字符串、JSON、简单XML格式等。所以,写解析逻辑非常简单。
14、MVC中识别POST或者GET,可以使用Request.HttpMethod./15、MVC中的打包与压缩帮助我们减少一个页面的请求时间,从而提高页面执行性能。
打包如何搞高性能?
我们的项目总是需要CSS和脚本文件。打包帮助你合并多个Javascript和css文件到单个文件,从而最小化多个请求到一个请求。
例如,包含下面的web请求到一个页。这个页面要求两个Javascript文件, Javascript1.js 和 Javascript2.js 。 当请求这个页面时,它要做三次请求:
- 一个是Index页面.
- 两个请求是为了两个JavaScript文件: Javascript1.js 和 Javascript2.js .
如果页面中有大量的javascript文件,这样会降低性能。如果我们可以合并所有的JS文件到一个文件,只请求一个,这将加增加性能。
15、在debug模式下,你需要在bundleconfig.cs中设置 EnableOptimizations 为true,否则你不会看到打包效果。
BundleTable.EnableOptimizations = true;
16、压缩功能通过移除空格、注释等减少了脚本与CSS文件的大小