Answers:
就像其他人回答的那样,.cshtml
(或者这.vbhtml
是否适合您)提供了处理程序映射以加载MVC引擎。该.aspx
扩展程序仅加载aspnet_isapi.dll,后者执行编译并提供Web表单。处理程序映射中的区别只是一种允许两者共存于同一服务器上的方法,从而允许MVC应用程序和WebForms应用程序都位于同一根目录下。
这允许http://www.mydomain.com/MyMVCApplication有效,并与MVC规则一起使用,并且与http://www.mydomain.com/MyWebFormsApplication一起作为标准Web表单有效。
编辑:
至于技术上的差异,MVC(Razor)模板框架旨在将.Net页面返回到更RESTful的基于Web的模板视图平台,该平台将模型之间的代码逻辑分开(业务/数据对象) ,视图(用户看到的内容)和控制器(两者之间的连接)。WebForms模型(aspx)是Microsoft尝试使用复杂的javascript嵌入来模拟更具状态的应用程序,类似于WinForms应用程序,该应用程序具有事件和页面生命周期,该事件能够在页面之间保留其自身的状态。
使用一个或另一个的选择总是有争议的,因为对这两个系统都有反对意见。我喜欢MVC架构中的简单性(尽管路由很简单)和Razor语法的简单性。我觉得WebForms架构太重了,无法成为有效的Web平台。话虽这么说,但在许多实例中,WebForms框架提供了一个非常简洁和可用的模型,并具有定义明确的丰富事件结构。一切都归结为应用程序的需求以及构建它的人的喜好。
Razor是ASP.NET MVC 的视图引擎,也是模板引擎。剃刀代码和ASP.NET内联代码(与标记混合的代码)都先被编译,然后在执行之前变成临时程序集。因此,就像C#和VB.NET都可以编译为可互换的IL一样,Razor和Inline代码也可以互换。
因此,更多的是风格和兴趣。我更喜欢剃刀,而不是ASP.NET内联代码,也就是说,相对于.aspx页面,我更喜欢Razor(cshtml)页面。
想象一下,您想获得一个Human
类并进行渲染。在cshtml文件中,您可以编写:
<div>Name is @Model.Name</div>
在aspx文件中,您可以编写:
<div>Name is <%= Human.Name %></div>
如您所见,@
剃须刀的标志使混合代码和标记变得更加容易。
Model
用于强类型视图,您可以在其中使用model
关键字在顶部定义类型。
尽管Razor(.cshtml
/ .vbhtml
)和WebForms(.aspx
/ .ascx
)之间的语法肯定有所不同,(Razor是两者中更为简洁和现代的),但是没有人提到,虽然两者都可以用作传统ASP.NET的View Engines / Templating Engines。 Web窗体控件可以在任何.aspx或.ascx文件上使用(甚至与MVC体系结构保持一致)。
这对于已经建立了长期解决问题的方案并将其打包到可插拔组件(例如,大文件上传控件)中并且您想在MVC站点中使用它的情况非常重要。使用Razor,您将无法做到这一点。但是,您可以使用带有Web窗体视图的传统ASP.NET体系结构执行所有相同的后端处理。
此外,ASP.NET Web窗体视图可以具有代码隐藏文件,该文件允许将逻辑嵌入到与视图一起编译的单独文件中。尽管软件开发社区逐渐将紧密耦合的体系结构和智能客户端模式视为不受欢迎的做法,但它过去一直是主要的处理方式,并且仍然非常可能使用.aspx / .ascx文件。剃刀故意没有这种品质。