116

我想知道什么、为什么或什么时候选择 cshtml 更好,什么、为什么或什么时候选择 aspx 技术更好?这两种技术的用途是什么?

谢谢,

4

4 回答 4

114

正如其他人所回答的那样,.cshtml(或者.vbhtml如果那是您的口味)提供了一个处理程序映射来加载 MVC 引擎。该.aspx扩展只加载执行编译和提供 Web 表单的 aspnet_isapi.dll。处理程序映射的区别只是一种允许两者在同一服务器上共存的方法,从而允许 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 框架都提供了一个非常简洁和可用的模型,该模型具有定义良好的丰富事件结构。这一切都归结为应用程序的需求和构建它的人的偏好。

于 2012-06-06T11:50:13.217 回答
46

Razor 是 ASP.NET MVC 的视图引擎,也是模板引擎。Razor 代码和 ASP.NET 内联代码(与标记混合的代码)都首先编译并在执行之前变成临时程序集。因此,就像 C# 和 VB.NET 都编译为 IL 一样,这使得它们可以互换,Razor 和内联代码都是可以互换的。

因此,这更多的是风格和兴趣的问题。我更喜欢使用 razor,而不是 ASP.NET 内联代码,也就是说,我更喜欢 Razor (cshtml) 页面而不是 .aspx 页面。

想象一下,你想获得一个Human类,并渲染它。在您编写的 cshtml文件中:

<div>Name is @Model.Name</div>

在您编写的aspx文件中:

<div>Name is <%= Human.Name %></div>

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

于 2012-06-06T11:44:48.783 回答
11

.cshtml虽然 Razor ( / .vbhtml) 和 WebForms ( .aspx/ )之间的语法肯定不同.ascx,(Razor 是两者中更简洁和现代的),但没有人提到虽然两者都可以用作视图引擎/模板引擎,但传统的 ASP.NET Web 窗体控件可用于任何 .aspx 或 .ascx 文件(即使与 MVC 架构相结合)。

这与已建立长期解决问题的解决方案并将其打包到可插入组件(例如大文件上传控件)并且您希望在 MVC 站点中使用它的情况相关。使用 Razor,您无法做到这一点。但是,您可以使用带有 Web 窗体视图的传统 ASP.NET 体系结构执行所有相同的后端处理。

此外,ASP.NET Web 表单视图可以具有代码隐藏文件,它允许将逻辑嵌入到与视图一起编译的单独文件中。虽然软件开发社区越来越多地将紧密耦合的架构和智能客户端模式视为不好的做法,但它曾经是主要的做事方式,并且在 .aspx/.ascx 文件中仍然很有可能。Razor 故意没有这样的品质。

于 2012-06-06T12:03:59.577 回答
6

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

于 2012-06-06T11:38:50.947 回答