任何人都在使用新的CSHTML页面功能,并且发现他们比现有的ASP.NET MVC默认视图引擎或Web表单更喜欢这种新的视图引擎语法,如果是,为什么?与HTML相比,CSHTML会给您带来什么优势,反之亦然?
只是好奇地听到人们对此的看法。
任何人都在使用新的CSHTML页面功能,并且发现他们比现有的ASP.NET MVC默认视图引擎或Web表单更喜欢这种新的视图引擎语法,如果是,为什么?与HTML相比,CSHTML会给您带来什么优势,反之亦然?
只是好奇地听到人们对此的看法。
Answers:
好处之一是Razor视图可以在单元测试中呈现,而以前的ASP.Net呈现器很难做到这一点。
从ScottGu的公告中,这被列为设计目标之一:
可单元测试:新的视图引擎实现将支持单元测试视图的功能(无需控制器或Web服务器,并且可以托管在任何单元测试项目中-无需特殊的应用程序域)。
我曾在MSDN网站的核心团队工作。现在,我与我的编程团队一起将c#razor用于电子商务网站,我们将重点放在带有后端c#razor页面和LINQ-Entity内存数据库的jQuery前端上,因此即使在嵌套查询循环时,这些页面的响应时间也为1-2毫秒并且没有页面缓存。我们不使用MVC,只是使用带有IIS 7的URL重写模块映射的剃须刀页面的普通ASP.NET,根本不使用ASPX页面或ViewState或服务器端事件编程。它没有MVC为挑战的正则表达式放入代码结构中的多余(不必要的)层。少即是多。这一切都是苗条和卑鄙的,但是我为MVC的可测试性提供了支持,仅此而已。
剃刀页面没有ASPX页面那样的事件生命周期。它只是呈现为一个请求的页面。C#是一种很棒的语言,Razor很好地摆脱了困境,让它能够完成自己的工作。使用泛型和linq进行匿名键入使c#和razor页面的生活变得如此轻松。使用Razor页面将帮助您更轻松地思考和编写代码。
Razor和MVC的缺点之一是没有类似于ViewState的持久性。我需要为此实现一个解决方案,所以最终我在这里为此编写了一个jQuery插件-> http://www.jasonsebring.com/dumbFormState ,这是HTML 5离线存储支持的表单状态插件,在所有主要版本中均有效浏览器。它目前仅用于表单状态,但是您可以非常简单地使用window.sessionStorage或window.localStorage在回发甚至页面请求之间存储任何状态,我只是想让它根据URL和表单索引对其进行自动保存和命名空间,所以您不必考虑。
最大的好处就是代码更加简洁。VS编辑器还将具有其他某些视图引擎所不具备的IntelliSense支持。
声明性HTML帮助器看起来也很酷,因为在C#代码中使用HTML帮助器使我想起了ASP.NET中的自定义控件。我认为他们使用了内联代码从局部页面中获取了页面。
因此,相对于asp.net视图引擎有一些明显的好处。
与之相对的是像spark这样的视图引擎:
Spark仍然更加简洁,您可以将if和loops保留在html标签本身中。标记对我来说仍然更自然。
您可以精确地编写partials的代码,就像编写声明性助手一样,只需将变量传递给partials,就可以了。这已经有一段时间了。