我想知道什么,为什么或什么时候更好地选择cshtml以及选择aspx技术的原因是什么,为什么或何时更好?这两种技术的目的是什么?
谢谢,
答案 0 :(得分:104)
正如其他人已经回答的那样,.cshtml
(或.vbhtml
如果这是你的风味)提供了一个处理程序映射来加载MVC引擎。 .aspx
扩展只是加载执行编译的aspnet_isapi.dll并提供Web表单。处理程序映射的区别仅仅是允许两者在同一服务器上共存的方法,允许MVC应用程序和WebForms应用程序在共同的根目录下生存。
这允许http://www.mydomain.com/MyMVCApplication有效并与MVC规则以及http://www.mydomain.com/MyWebFormsApplication一起提供,以作为标准网络表单有效。
修改强>
至于技术上的差异,MVC(Razor)模板框架旨在将.Net页面返回到更加REST的“基于Web”的模板化视图平台,将模型(业务/数据对象)之间的代码逻辑分开,查看(用户看到的内容)和控制器(两者之间的连接)。 WebForms模型(aspx)是Microsoft尝试使用复杂的javascript嵌入来模拟更有状态的应用程序,类似于WinForms应用程序,其中包含事件和页面生命周期,能够在页面之间保留自己的状态。
使用其中一个的选择总是有争议的,因为支持和反对这两个系统都存在争议。我喜欢MVC架构中的简单性(尽管路由不是简单的)和Razor语法的简易性。我觉得WebForms体系结构太重了,无法成为一个有效的Web平台。话虽如此,有很多实例,WebForms框架提供了一个非常简洁和可用的模型,其中包含一个定义良好的丰富事件结构。这一切都归结为应用程序的需求和构建它的人的偏好。
答案 1 :(得分:41)
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>
在 aspx 文件中,你写道:
<div>Name is <%= Human.Name %></div>
正如您所看到的,@
剃刀的标志使得混合代码和标记变得更加容易。
答案 2 :(得分:10)
虽然Razor(.cshtml
/ .vbhtml
)和WebForms(.aspx
/ .ascx
)之间的语法肯定不同,但是(Razor是更简洁和现代的) 2),没有人提到虽然两者都可以用作View Engines / Templating Engines,但传统的ASP.NET Web Forms控件可以用在任何.aspx或.ascx文件上(甚至可以与MVC架构结合使用)。
这与已建立问题的长期解决方案并打包到可插入组件(例如大文件上载控件)并且您想要在MVC站点中使用它的情况相关。使用Razor,你无法做到这一点。但是,您可以执行与使用Web窗体视图的传统ASP.NET体系结构相同的所有后端处理。
此外,ASP.NET Web窗体视图可以具有Code-Behind文件,这允许将逻辑嵌入到与视图一起编译的单独文件中。虽然软件开发社区正在逐渐看到紧密耦合的体系结构和Smart Client pattern as bad practice,但它曾经是主要的处理方式,并且仍然可以使用.aspx / .ascx文件。 Razor故意没有这样的品质。
答案 3 :(得分:3)
Cshtml文件是Razor使用的文件,如this question的答案所述,它们的主要优点是它们可以在单元测试中呈现。对这个其他主题的各种答案将带来许多其他有趣的观点。