什么,为什么或何时选择cshtml vs aspx更好?

Bas*_*mme 103 asp.net asp.net-mvc razor

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

谢谢,

Joe*_*ton 106

正如其他人已经回答的那样.cshtml(或者.vbhtml如果这是你的风味)提供了一个处理程序映射来加载MVC引擎.该.aspx扩展只加载执行编译并提供了网络形式ASPNET_ISAPI.DLL.处理程序映射的区别仅仅是允许两者在同一服务器上共存的方法,允许MVC应用程序和WebForms应用程序在共同的根目录下生存.

这允许http://www.mydomain.com/MyMVCApplication有效并与MVC规则以及http://www.mydomain.com/MyWebFormsApplication一起提供,以作为标准Web表单有效.

编辑:
至于技术上的差异,MVC(Razor)模板框架旨在将.Net页面返回到更加REST的"基于Web"的模板化视图平台,将模型(业务/数据对象)之间的代码逻辑分开,视图(用户看到的内容)和控制器(两者之间的连接).WebForms模型(aspx)是Microsoft尝试使用复杂的javascript嵌入来模拟更有状态的应用程序,类似于WinForms应用程序,其中包含事件和页面生命周期,能够在页面之间保留自己的状态.

使用其中一个的选择总是有争议的,因为支持和反对这两个系统都存在争议.我喜欢MVC架构中的简单性(尽管路由不是简单的)和Razor语法的简易性.我觉得WebForms体系结构太重了,无法成为一个有效的Web平台.话虽如此,有很多实例,WebForms框架提供了一个非常简洁和可用的模型,其中包含一个定义良好的丰富事件结构.这一切都归结为应用程序的需求和构建它的人的偏好.

  • +1,这是关于ASP.NET Web Form为无状态Web创建有状态环境的目标之间区别的重要一点. (9认同)

Sae*_*ati 42

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

因此,它更多的是风格和兴趣.我更喜欢剃刀,而不是ASP.NET内联代码,也就是说,我更喜欢Razor(cshtml)页面到.aspx页面.

想象一下,你想要一个Human类,并渲染它.在你写的cshtml文件中:

<div>Name is @Model.Name</div>
Run Code Online (Sandbox Code Playgroud)

aspx文件中,你写道:

<div>Name is <%= Human.Name %></div>
Run Code Online (Sandbox Code Playgroud)

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

  • @MikaëlMayer,在Razor中,`Model`用于强类型视图,在其中使用`model`关键字在顶部定义类型. (6认同)

sma*_*man 10

虽然Razor(.cshtml/ .vbhtml)和WebForms(.aspx/ .ascx)之间的语法肯定不同,(Razor是两者中更简洁和现代的),没有人提到虽然两者都可以用作View Engines/Templating Engines,传统的ASP.NET Web窗体控件可用于任何.aspx或.ascx文件(甚至与MVC架构的内聚).

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

此外,ASP.NET Web窗体视图可以具有Code-Behind文件,这允许将逻辑嵌入到与视图一起编译的单独文件中.虽然软件开发社区越来越多地将紧密耦合的体系结构和智能客户端模式视为不良实践,但它曾经是主要的处理方式,并且仍然可以使用.aspx/.ascx文件.Razor故意没有这样的品质.


Tim*_*non 6

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