什么,为什么或何时最好选择cshtml与aspx?


108

我想知道什么,为什么或何时最好选择cshtml,以及什么,为什么或何时最好选择aspx技术?这两种技术的目的是什么?

谢谢,


我认为我在microsoft.com网站上的任何地方都没有看到cshtml文件。
user34660

@ user34660如何确定是cshtml还是aspx?扩展名是隐藏的。
Sajuuk

Answers:


111

就像其他人回答的那样,.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框架提供了一个非常简洁和可用的模型,并具有定义明确的丰富事件结构。一切都归结为应用程序的需求以及构建它的人的喜好。


11
+1,这是区分ASP.NET Web窗体旨在为无状态Web创建有状态环境的目标之间的重要点。
smartcaveman 2012年

与cshtml相比,aspx的一个主要优点是您可以使用设计选项卡查看和编辑页面本身(类似WUSIWYG)。对于cshtml文件,您不妨使用记事本来编辑html页面。您正在“在黑暗中”工作。
nivs1978 '18

@ nivs1978:我实际上发现这是不利的一面。太多的开发人员将此用作编写马虎标记的拐杖。最后,设计者仅能向您显示页面的“几乎”版本,因为它只会使用自己的内部“浏览器”呈现视图。尽管您可以大致了解页面的显示方式,但是直到在真正的浏览器中呈现页面后,您仍然无法知道。
乔尔·

44

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>

如您所见,@剃须刀的标志使混合代码和标记变得更加容易。


6
Razor中的@MikaëlMayer Model用于强类型视图,您可以在其中使用model关键字在顶部定义类型。
Saeed Neamati 2014年

@SaeedNeamati一个小问题……假设我们正在构建一个Web应用程序,以使用基于复杂微服务的SOAP webAPI ....在这种情况下,asp.net mvc aspx或mvc cshtml更好用。我个人觉得cshtml语法更容易。
codemilan

好的答案……这个答案更容易理解……,至少对于像我这样的初学者而言:)
eRaisedToX

10

尽管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文件。剃刀故意没有这种品质。


当我开始编写
该书时

4

Cshtml文件是Razor使用的文件,正如对此问题的回答所述,它们的主要优点是它们可以在单元测试中呈现。对另一个主题的各种回答将带来很多其他有趣的观点。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.