【01】一起学ASP之《ASP.NET MVC企业级实战》
【1】我们平时写简单的使用数据库的代码,一般都是直接var db = new DBModel()
之类的,讲究一些的会把这段代码写在using()
里面,但是这不是很好的做法。主要原因是,如果我们涉及到多个DAL
的话,那么每个DAL
自己去创建一个DbContext
,那么最终会导致混乱甚至脏读的出现,我们的目的就是尽量保证上下文只出现一个DbContext
,目前我们可以通过HttpContext
来实现,即把我们创建的DbContext
放在它里面,因为我们一次请求就对应着一个HttpContext
,我们在这个请求里进行一些操作,这个请求结束HttpContext
就销毁了,放在它里面的DbContext
也就销毁了,连我们手动销毁创建的DbContext
这个步骤都省略了。所以,一般是在Commons里面新建一个工厂类,专门处理这一块创建的逻辑:
using System.Data.Entity;
using System.Web;
using Charpter01.EFModels;namespace Charpter01.Common
{public class DBContextFactory{public static DbContext getDBContext(){DbContext dbContext = HttpContext.Current.Items["dbContext"] as DbContext;if(dbContext == null){dbContext = new DBModel();HttpContext.Current.Items["dbContext"] = dbContext;}return dbContext;}public static void removeDBContext(){DbContext dbContext = HttpContext.Current.Items["dbContext"] as DbContext;if(dbContext != null){HttpContext.Current.Items.Remove("dbContext");}}// 不需要手动销毁了,我们放在HttpContext里面,跟随着HttpContext的创建和毁灭//public static int saveChanges()//{// return getDBContext().SaveChanges();//}}
}
【2】控制器向视图层传递数据的话,我们都知道使用ViewBag
,我们还知道有一个ViewData
,这里面ViewData
是一个字典,使用方法就是ViewData["xxx"]
,它的存取值可以看做是一个object
,所以其实是要进行显示转换的;而ViewBag
的使用方法更像是类和属性的使用,类似于ViewBag.xxx
,它的存取值其实可以看做是一个dynamic
,其实本质上ViewBag
只是在ViewData
外面做了一层层封装,这个封装之后,就不需要用户手动显示转换类型,程序会帮我们做类型的自动转换,所以理论上ViewBag
因为多了一层封装性能上会稍微差于ViewData
,但是这种差异几乎可以忽略不计。
【3】BundleConfig.cs
文件的主要作用就是压缩静态文件,压缩的静态文件主要是css
和js
,但是要想它发挥作用,需要把项目的调试关闭。压缩的效果就是把页面引用的js
文件全部打包成1个文件,请求次数也少了,总的文件大小也相对小了一点。css
也同样处理,物以类聚。
<system.web><compilation debug="false" targetFramework="4.5" />...</system.web>
【4】如果使用MVC
做web网站的话,估计大部分人都在使用Razor
模板引擎,我们在指定的位置创建cshtml
文件,它就会自动找到。我们可以看看它是怎么找的,要查看这个模板查找顺序的话,可以新建一个控制器比如PostController
,然后就没有然后了,直接启动,然后在浏览器访问这个控制器http://localhost:7202/Post
,后面不要跟Action
什么的,就能看到它给我们的详细信息,这个相信信息里就有模板查找的顺序。
“/”应用程序中的服务器错误。
未找到视图“Index”或其母版视图,或没有视图引擎支持搜索的位置。搜索了以下位置:
~/Views/Post/Index.aspx
~/Views/Post/Index.ascx
~/Views/Shared/Index.aspx
~/Views/Shared/Index.ascx
~/Views/Post/Index.cshtml
~/Views/Post/Index.vbhtml
~/Views/Shared/Index.cshtml
~/Views/Shared/Index.vbhtml
可以看到,这里面搜索了两个地方,一个是~/Views/Post/
,一个是~/Views/Shared/
,这个好理解,先去自己对应控制器的视图目录去找,找不到就去共享视图目录中找,但让人想不通的是,它找的时候,不是优先找我们的cshtml
文件,而是先尝试找了aspx
和ascx
之类的文件,我们知道这是WebForm
里的一套模板。也就是说,如果我们不做任何优化,那么这里的模板查找,总是会在经过几个错误
的查找,然后才能找到最终的文件。当然,事先声明,这个查找速度是很快的,影响很小,但是,我还是觉得有必要优化一下,除非我不知道有这么回事。怎么优化?核心就是我们的MVC
程序里面其实默认有2套模板引擎,WebForm
和Razor
,我们看到的aspx
之类的就是WebForm
在发挥作用,而且它还优先了,这上哪儿说理去。知道这一点,优化也就简单了,如果你用到了WebForm
,那么就不要改了,如果你只是用Razor
的话,就直接把WebForm
删除就好了,删除就是在Global.asax.cs
中写:
public class MvcApplication : System.Web.HttpApplication{// 移除WebFormEnginepublic void removeWebFormEngine(){var viewEngine = ViewEngines.Engines;var webFormEngine = viewEngine.OfType<WebFormViewEngine>().FirstOrDefault();if(webFormEngine != null){viewEngine.Remove(webFormEngine);}}protected void Application_Start(){// 移除WebFormEngineremoveWebFormEngine();AreaRegistration.RegisterAllAreas();GlobalConfiguration.Configure(WebApiConfig.Register);FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);RouteConfig.RegisterRoutes(RouteTable.Routes);BundleConfig.RegisterBundles(BundleTable.Bundles);}}
现在再启动,然后访问http://localhost:7202/Post
的话,就看到模板查找目录和文件相对精准多了,当然理论上将速度也会提高那么一点点点。
“/”应用程序中的服务器错误。
未找到视图“Index”或其母版视图,或没有视图引擎支持搜索的位置。搜索了以下位置:
~/Views/Post/Index.cshtml
~/Views/Post/Index.vbhtml
~/Views/Shared/Index.cshtml
~/Views/Shared/Index.vbhtml
【5】ASP.NET MVC
的程序默认是会把MVC版本号
返回给浏览器的,我们可以从下图中看出。如果更改这个默认配置,同样在Global.asax.cs
中:
protected void Application_Start(){// 不要传递mvc版本号给浏览器MvcHandler.DisableMvcResponseHeader = true;...}
【01】一起学ASP之《ASP.NET MVC企业级实战》相关推荐
- 关于《ASP.NET MVC企业级实战》
大家好,我的书<ASP.NET MVC企业级实战>已经出版啦,感谢大家过去的关注与支持!前言部分,出版的时候漏了部分内容,我这里将其贴出来. 注意:书上的源码下载地址已失效,最新源码下载地 ...
- ASP.NET MVC 企业级实战 —— 创建用户权限管理范例程序(三)
上一篇,主要讲解了模型的创建和利用Entity Framework来操作数据库,这篇我们会讲解如何创建控制器和视图. 由于最近很多网友反馈在VS 2012 无法安装NBlock框架模版,故再次声明,N ...
- 《ASP.NET MVC企业实战》(一) MVC开发前奏
一.工具和方法 学到了一些没用过的工具和方法: a)删除多余的using指令并排序:一个类头部的using一般会有很多用不到的,在完成类的编写后,可以右键选择"组织using"来删 ...
- 《ASP.NET MVC企业实战》(二) MVC开发前奏
2019独角兽企业重金招聘Python工程师标准>>> 在上一篇"<ASP.NET MVC企业级实战>(一)MVC开发前奏"中记录了作者介绍的一些 ...
- 1月4日链接篇:ASP.NET, ASP.NET AJAX, ASP.NET MVC, Visual Studio, IIS7
[原文地址]Jan 4th Links: ASP.NET, ASP.NET AJAX, ASP.NET MVC, Visual Studio, IIS7 [原文发表日期] Friday, Januar ...
- ASP .NET Core Web MVC系列教程四:添加模型
系列文章目录:ASP .NET Core Web MVC系列教程:使用ASP .NET Core创建MVC Web应用程序 上一个教程:ASP .NET Core Web MVC系列教程三:添加视图 ...
- ASP .NET Core Web MVC系列教程三:添加视图
系列文章目录:ASP .NET Core Web MVC系列教程:使用ASP .NET Core创建MVC Web应用程序 上一个教程:ASP .NET Core Web MVC系列教程二:添加控制器 ...
- ASP .NET Core Web MVC系列教程二:添加控制器
系列文章目录:ASP .NET Core Web MVC系列教程:使用ASP .NET Core创建MVC Web应用程序 上一个教程:ASP .NET Core Web MVC系列教程一:创建一个W ...
- ASP .NET Core Web MVC系列教程一:创建一个Web应用程序
系列文章目录:ASP .NET Core Web MVC系列教程:使用ASP .NET Core创建MVC Web应用程序 从Visual Studio中选择" 创建新项目". 选 ...
最新文章
- 编程面试中的十个常见错误
- Android NDK开发篇(一):新版NDK环境搭建(免Cygwin,超级快)
- Python(17)_urllib下的parse的编码解码函数
- oxford5k和paris6k数据集介绍_sklearn函数:KFold(分割训练集和测试集)
- php代码时间控制,PHP 网页过期时间的控制代码
- Kiwi浏览器 MIUI禁第三方广告 ADB停用系统应用
- SAP License:GB01中替代字段释放
- java 负数异常_java基础之异常
- Bailian2692 假币问题【暴力】
- 武装突袭3fps服务器不稳定,大神教你解决win10系统玩《武装突袭3》超级卡顿的详细技巧...
- 易软门诊管理软件php,易软门诊管理系统
- 威纶通触摸屏232脚位_威纶触摸屏tk6070iq232接口引脚电 – 手机爱问
- Linux登录公开ftp命令,linux下登录ftp, lftp命令详解
- 基于社交图谱的多层关系挖掘推荐
- 很是惆怅,不知如何看待自己智能车竞赛获奖结果
- Mac M1安装fish shell 遇见的坑
- 初出茅庐的小李第63博客之FastLED库的使用
- SWO引脚配置覆盖, 导致ITM信息打印失效
- 谷歌浏览器存放插件文件在电脑中位置路径
- 如何增加新浪微博粉丝数