什么,为什么或什么时候selectcshtml vs aspx更好?
我想知道为什么什么时候selectcshtml以及什么时候selectaspx技术更好? 这两种技术的目的是什么?
谢谢,
正如其他人已经回答, .cshtml
(或.vbhtml
如果这是你的味道)提供了一个处理程序映射来加载MVC引擎。 .aspx
扩展只是加载执行编译和提供Web窗体的aspnet_isapi.dll。 处理程序映射的不同之处在于允许两者共存于同一台服务器上,允许MVC应用程序和WebForms应用程序共同存在。
编辑:
至于技术上的差异,MVC(Razor)模板框架旨在将.Net页面返回到一个更为REST风格的“基于Web”的模板视图平台,将模型(业务/数据对象),查看(用户看到的)和控制器(两者之间的连接)。 WebForms模型(aspx)是微软尝试使用复杂的JavaScriptembedded来模拟更类似于WinForms应用程序的更有状态的应用程序,事件和页面生命周期可以保持页面之间的状态。
select使用这两个系统往往是一个有争议的select,因为有争论和反对这两个系统。 我喜欢简单的MVC架构(尽pipe路由不过是简单的事情)和Razor语法的简单性。 我觉得WebForms架构太重,无法成为一个有效的Web平台。 话虽如此,WebForms框架提供了一个非常简洁和实用的模型,其中有一个定义良好的丰富的事件结构。 这一切都归结为应用程序的需求和build设它们的偏好。
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>
正如你所看到的,剃刀的@
符号使得混合代码和标记变得更容易。
尽pipeRazor( .cshtml
/ .vbhtml
)和WebForms( .aspx
/ .ascx
)之间的语法确实不同(Razor是两者中更简洁和现代的),但是没有人提到过,虽然两者都可以用作View引擎/模板引擎,传统的ASP.NET Web窗体控件可以在任何.aspx或.ascx文件上使用(即使与MVC体系结构一致)。
这在长期解决问题的方法已经build立并打包成可插入组件(例如大file upload控件)并且您想在MVC站点中使用它的情况下是相关的。 用剃刀,你不能这样做。 但是,您可以执行所有与使用Web窗体视图的传统ASP.NET体系结构相同的后端处理。
此外,ASP.NET Web窗体视图可以具有代码隐藏文件,允许将逻辑embedded到与视图一起编译的单独文件中。 尽pipe软件开发社区越来越多地将紧密耦合的体系结构和智能客户端模式视为不好的做法 ,但它曾经是做事的主要方式,并且仍然非常有可能使用.aspx / .ascx文件。 剃刀故意没有这样的质量。
Cshtml文件是Razor使用的文件,正如这个问题的答案所述,它们的主要优点是它们可以在unit testing中渲染。 这个其他主题的各种答案将带来很多其他有趣的观点。
- 从其他控制器呈现部分视图
- 如何在razor中指定数据属性,例如@ this.Html.CheckBoxFor(…)上的data-externalid =“23151”
- Razor MVC使用Model Array填充Javascript数组
- 尝试“System.Web.Mvc.PreApplicationStartCode.Start()”到关键方法“System.Web.WebPages.Razor.PreApplicationStartCode.Start()”失败
- 在部分视图中放入JavaScript是否可行?
- 禁用Razor中的Visual Studio代码格式
- 使用entity framework(.edmx模型)&Razor视图&&将数据库logging插入多个表创buildMVC3的下拉列表
- ASP.NET MVC 3(Razor)Ajax.ActionLink – 我做错了什么?
- Html.RenderPartial给我奇怪的重载错误?