ASP.NET MVC 3和4之间的区别?
是否有一个全面的列表,解释了MVC4的所有新特性,以及MVC3的所有变化?
( 发行说明没有多大帮助)
从MVC4发行说明复制并粘贴:
• 现代HTTP编程模型 :使用新的强typesHTTP对象模型直接访问和操作Web API中的HTTP请求和响应。 通过新的HttpClienttypes,相同的编程模型和HTTPpipe道在客户端对称可用。
• 完全支持路由 :ASP.NET Web API支持ASP.NET路由的全套路由function,包括路由参数和约束。 此外,使用简单的约定将动作映射到HTTP方法。
• 内容协商 :客户端和服务器可以一起工作,以确定从Web API返回的数据的正确格式。 ASP.NET Web API提供对XML,JSON和表单URL编码格式的默认支持,您可以通过添加自己的格式化程序来扩展此支持,甚至可以replace默认的内容协商策略。
• 模型绑定和validation :模型绑定器提供了一种从HTTP请求的各个部分提取数据的简单方法,并将这些消息部分转换为可由Web API操作使用的.NET对象。 也基于数据注释对动作参数进行validation。
• filter :ASP.NET Web API支持包括众所周知的filter的filter,例如[Authorize]属性。 您可以编写和插入自己的filter,以执行操作,授权和exception处理。
• 查询组合 :在返回IQueryable的操作上使用[Queryable]filter属性,以支持通过OData查询约定查询您的Web API。
• 改进的可testing性 :与其在静态上下文对象中设置HTTP细节,Web API操作与HttpRequestMessage和HttpResponseMessage的实例一起工作。 创build一个unit testing项目以及您的Web API项目,快速开始为您的Web APIfunction编写unit testing。
• 基于代码的configuration :ASP.NET Web APIconfiguration仅通过代码完成,保持您的configuration文件清洁。 使用提供服务定位器模式来configuration可扩展性点。
• 改进对控制反转(IoC)容器的支持 :ASP.NET Web API通过改进的依赖关系parsing器抽象为IoC容器提供了强大的支持
• 自主服务 :除了IIS之外,Web API还可以在您自己的进程中进行托pipe,同时仍然使用Web API的全部路由function和其他function。
• 创build自定义的帮助和testing页面 :现在,您可以使用新的IApiExplorer服务轻松地为您的Web API构build自定义的帮助和testing页面,以获取完整的Web API运行时描述。
• 监视和诊断 :ASP.NET Web API现在提供轻量级的跟踪基础架构,可以轻松地与现有的日志logging解决scheme(如System.Diagnostics,ETW和第三方日志logging框架)集成。 您可以通过提供一个ITraceWriter实现并将其添加到您的Web APIconfiguration来启用跟踪。
• 链接生成 :使用ASP.NET Web API UrlHelper在相同的应用程序中生成指向相关资源的链接。
• Web API项目模板 :从New MVC 4 Project向导中select新的Web API项目,以快速启动并运行ASP.NET Web API。
• 脚手架 :使用“添加控制器”对话框可以基于基于entity framework的模型types快速搭buildWeb API控制器。
复制并粘贴从MVC4新MVC3 – MVC4
MVC4 MVC3与MVC4的新特性
默认项目模板的增强
用于创build新的ASP.NET MVC 4项目的模板已更新,以创build更现代化的网站
移动项目模板
如果您正在开始一个新项目,并且想要专门为手机和平板电脑浏览器创build网站,则可以使用新的移动应用程序项目模板。 这是基于jQuery Mobile,一个用于构build触控优化UI的开源库
显示模式
新的“显示模式”function使应用程序可以根据发出请求的浏览器来select视图。 例如,如果桌面浏览器请求主页,则应用程序可能使用Views\Home\Index.cshtml
模板。 如果移动浏览器请求主页,则应用程序可能会返回Views\Home\Index.mobile.cshtml
模板。
DisplayModes.Modes.Insert(0, new DefaultDisplayMode("iPhone") { ContextCondition = (context => context.Request.UserAgent.IndexOf ("iPhone", StringComparison.OrdinalIgnoreCase) >= 0) });
jQuery Mobile,视图切换器和浏览器重写
jQuery Mobile是一个用于构build触摸优化的Web UI的开源库。 如果你想使用jQuery Mobile和ASP.NET MVC 4应用程序,你可以下载并安装一个可以帮助你开始的NuGet包。 要从Visual Studio包pipe理器控制台安装它,请input以下命令:Install-Package jQuery.Mobile.MVC这将安装jQuery Mobile和一些帮助程序文件,其中包括以下内容:Views / Shared / Layout.Mobile.cshtml,这是一个基于jQuery Mobile的布局。 视图切换器组件,由Views / Shared / ViewSwitcher.cshtml分部视图和ViewSwitcherController.cs控制器组成。 安装软件包后,使用移动浏览器(或类似的Firefox用户代理切换器附件)运行应用程序。 你会发现你的页面看起来完全不同,因为jQuery Mobile处理布局和样式。 要利用这一点,您可以执行以下操作如果访问者单击该链接,则会切换到同一页面的桌面版本。 由于您的桌面布局默认不包含视图切换器,访问者将无法进入移动模式。 为了实现这个function,请将以下对_ViewSwitcher的引用添加到您的桌面布局中,就在元素中:
@Html.Partial("_ViewSwitcher")
…浏览器重写是ASP.NET MVC 4的一个核心function,即使你不安装jQuery.Mobile.MVC包也是可用的。 但是,它仅影响视图,布局和部分视图select – 它不会影响依赖于Request.Browser对象的任何其他ASP.NETfunction。
Visual Studio中的代码生成食谱
新的Recipesfunction使Visual Studio能够根据您可以使用NuGet安装的软件包生成特定于解决scheme的代码。 Recipes框架使开发人员可以轻松编写代码生成插件,您还可以使用它replace添加区域,添加控制器和添加视图的内置代码生成器。 因为食谱被部署为NuGet包,所以它们可以很容易地被检查到源代码控制中,并自动与项目中的所有开发人员共享。 它们也可以按照解决scheme提供。
asynchronous控制器的任务支持
您现在可以将asynchronous操作方法编写为返回Task或Tasktypes的对象的单个方法。
例如,如果您正在使用Visual C#5(或使用Async CTP),则可以创build一个asynchronous操作方法,如下所示:
public async Task Index(string city) { var newsService = new NewsService(); var sportsService = new SportsService(); return View("Common", new PortalViewModel { NewsHeadlines = await newsService.GetHeadlinesAsync(), SportsScores = await sportsService.GetScoresAsync() }); }
在前面的操作方法中,对newsService.GetHeadlinesAsync和sportsService.GetScoresAsync的调用是asynchronous调用的,不会阻塞线程池中的线程。
返回任务实例的asynchronous操作方法也可以支持超时。 要使您的操作方法可取消,请将typesCancellationToken的参数添加到操作方法签名中。 以下示例显示了一个asynchronous操作方法,其超时时间为2500毫秒,如果发生超时,则会向客户端显示TimedOut视图。
[AsyncTimeout(2500)] [HandleError(ExceptionType = typeof(TaskCanceledException), View = "TimedOut")] public async Task Index(string city, CancellationToken cancellationToken) { var newsService = new NewsService(); var sportsService = new SportsService(); return View("Common", new PortalViewModel { NewsHeadlines = await newsService.GetHeadlinesAsync(cancellationToken), SportsScores = await sportsService.GetScoresAsync(cancellationToken) }); }
希望这可以帮助。 谢谢
请浏览所有MVC 4新function的URL
MVC 3
- 集成的脚手架系统可通过NuGet扩展
- 启用HTML 5的项目模板
- 富有performance力的视图,包括新的Razor视图引擎
- 强大的dependency injection和全局动作filter
- 丰富的JavaScript支持与不显眼的JavaScript,jQueryvalidation和JSON绑定
MVC 4
- ASP.NET Web API
- 刷新和现代化的默认项目模板
- 新的移动项目模板
- 支持移动应用程序的许多新function
- 增强了对asynchronous方法的支持
参考: http : //dotnet-developers-cafe.blogspot.in/2013/09/difference-between-aspnet-mvc-3-and-mvc.html
请检查下面的链接,找出差异。
http://forums.asp.net/t/1753017.aspx
http://www.askamoeba.com/Answer/130/Whats-new-in-MVC4-MVC3-Vs-MVC4
http://forums.asp.net/t/1918539.aspx?Main+difference+between+regular+webapplication+mvc3+and+mvc4+
MVC 4.0中引入的一个重要function是asynchronous控制器,它允许编写asynchronous操作方法。 asynchronous控制器允许在不使工作线程空闲的情况下执行操作。
在调用asynchronous操作时,将执行以下步骤:
Web服务器从线程池(工作线程)获取一个线程,并安排它来处理一个传入的请求。 这个工作线程启动一个asynchronous操作。 工作者线程返回到线程池以处理其他Web请求。 当asynchronous操作完成时,它会通知ASP.NET。 Web服务器从线程池(可能是与启动asynchronous操作的线程不同的线程)获取工作线程,以处理请求的其余部分,包括呈现响应。
将同步操作方法转换为asynchronous操作方法
以下是同步动作方法及其asynchronous等效版本的示例。
同步控制器:
public class TestController : Controller { public ActionResult Index() { return View(); } }
上述操作的asynchronous变体:
public class TestController : AsyncController { public void IndexAsync() { return View(); } public ActionResult IndexCompleted() { return View(); } }
脚步:
-
同步控制器是派生自Controller类的类,用于实现AsyncController,而不是从Controller派生控制器,从AsyncController类派生它。 从AsyncController派生的控制器使ASP.NET能够处理asynchronous请求,而且它们仍然可以为同步操作方法提供服务。
-
与同步控制器中的同步操作方法相对应,您需要为asynchronous控制器中的操作创build两个方法。启动asynchronous过程的第一个方法必须具有由动作和后缀“Async”组成的名称。 另一种在asynchronous过程完成时调用的方法(callback方法)必须有一个由动作和后缀“Completed”组成的名称。
在上面的示例中,Index操作已经转化为asynchronous控制器中的两个方法:IndexAsync和IndexCompleted。
IndexAsync方法返回void,而IndexCompleted方法返回一个ActionResult实例。 尽pipe该操作由两个方法组成,但它使用与同步操作方法(例如Controller / Index)相同的URL进行访问。
请注意以下关于asynchronous操作方法:
如果操作名称是Sample,框架将查找SampleAsync和SampleCompleted方法。
查看页面应该命名为Sample.aspx,而不是SampleAsync.aspx或SampleCompleted.aspx。 (操作名称是Sample,而不是SampleAsync)
控制器不能包含名为SampleAsync的asynchronous方法和名为Sample的同步方法。 如果有,则会引发AmbiguousMatchExceptionexception,因为SampleAsync操作方法和Sample操作方法具有相同的请求签名。
欲了解更多详情,请点击此处: http : //www.counsellingbyabhi.com/2014/05/asynchronous-controllers-in-aspnet-mvc.html
- 如何解决:处理程序“PageHandlerFactory-Integrated”在其模块列表中有一个错误的模块“ManagedPipelineHandler”
- 什么是jQuery Unobtrusivevalidation?
- 使用Razor声明视图的MVC HtmlHelper扩展
- ASP.NET MVC剃刀渲染没有编码
- 出生datevalidation不断显示
- 为什么DropDownListFor在提交之后会失去多重select,但是ListBoxFor却没有?
- MVC中UIHint属性的用法是什么
- Visual Studio 2013不能在cshtml中debuggingjavascript
- ASP.NET MVC和模型视图控制器模式 – 我从哪里开始?