【问题标题】:What, why or when it is better to choose cshtml vs aspx?什么,为什么或何时选择 cshtml 与 aspx 更好?
【发布时间】:2012-06-10 10:05:17
【问题描述】:

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

谢谢,

【问题讨论】:

  • 我认为我在 microsoft.com 网站的任何地方都没有看到 cshtml 文件。
  • @user34660 怎么判断是cshtml还是aspx?扩展名被隐藏了。

标签: asp.net asp.net-mvc razor


【解决方案1】:

正如其他人所回答的那样,.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 框架提供了一个非常简洁和可用的模型,该模型具有定义良好的丰富事件结构。这一切都归结为应用程序的需求和构建它的人的偏好。

【讨论】:

  • +1,这是关于 ASP.NET Web Form 的目标是为无状态 Web 创建有状态环境的一个重要点。
  • 与 cshtml 相比,aspx 的一个主要优势是您可以使用设计选项卡查看和编辑页面本身(WUSIWYG 类型)。使用 cshtml 文件,您不妨使用记事本来编辑您的 html 页面。您正在“在黑暗中”工作。
  • @nivs1978:我实际上发现这是它的缺点。太多的开发人员使用它作为编写草率标记的拐杖。最后,设计器只能向您展示页面的“几乎”版本,因为它只会使用自己的内部“浏览器”呈现视图。虽然您可能对页面的显示方式有一个大致的了解,但在真正的浏览器中呈现之前,您仍然无法知道。
【解决方案2】:

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>

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

【讨论】:

  • @MikaëlMayer,在 Razor 中,Model 用于强类型视图,您可以使用 model 关键字在顶部定义类型。
  • 问你一个小问题@SaeedNamati......假设我们正在构建一个Web应用程序来使用基于SOAP webAPI的复杂微服务......在这种情况下,是asp.net mvc aspx 或 mvc cshtml 更好用。我个人觉得cshtml语法更简单。
  • 不错的答案...这个答案更容易理解...,至少对于像我这样的初学者:)
【解决方案3】:

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

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

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

【讨论】:

  • 当我开始写这篇文章时,乔尔还没有进行编辑,但我会留下它以防有人觉得它有帮助
【解决方案4】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-03-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-25
    相关资源
    最近更新 更多