MVC ASP.NET or Razor

17
我对MVC非常陌生。我了解Silver-light和WPF以及MVVM,但在MVC方面的知识很少。我正在按照Microsoft网站上主要的教程http://www.asp.net/mvc/tutorials/getting-started-with-aspnet-mvc3/cs/adding-a-view进行学习。我相信我正在看第三篇文章。最开始,它告诉我创建我的MVC网站时要使用“Razor”的“View Engine”。我选择了使用“ASPX”而不是“Razor”,因为我认为这样会减少第三方依赖关系。
在开始新的MVC Web应用程序时,最好使用“Razor”而不是“ASPX”。老实说,我不知道两者之间的区别。正如我所说,我选择ASPX是为了避免任何额外的第三方dll或代码。如果最好选择ASPX,则有点困惑,因为MS网站上的教程告诉我要使用Razor开始。
有人可以解释一下什么情况下我应该使用“ASPX”视图引擎而不是“Razor”视图引擎吗?

是的,我需要更多关于为什么选择其中一个而不是另一个的原因。它们各自提供了什么,而另一个没有提供的东西。如果我使用 Razor 等工具,是否会限制自己只使用可能在未来几年内不再存在的开源第三方实现? - Dan P
请参见相关的SO线程 - EdSF
4个回答

21

在使用第三方依赖时,ASPX和Razor没有区别。不过,Razor更好,主要是因为它不会妨碍你。

你应该阅读Scott Guthrie的博客文章Introducing "Razor"

基本上,你只需要将开头和结尾标签<%%>替换为@符号,这样可以用更少的按键完成相同的操作,例如:

<%: Model.UserName %>

替换为

@Model.UserName

<% foreach (string name in nameList) { .. } %>

替换为

@foreach (string name in nameList) { .. }

还有一些细节需要注意,但并不太多。


1
这是另一个很好的资源,应该让你放心Razor是否会消失:http://www.dotnetrocks.com/default.aspx?showNum=606(与Phil Haack讨论Razor和MVC的.NET Rocks剧集) - Jon Crowell
那么实质上,Razor将<%= blah %>简写为@blah?如果是这种情况,请编辑您的答案,我会接受,因为我在这篇文章中看到的只有这个。 - Dan P
1
我已经接受了答案,但除了 <%= name %> 和 @name 之外,还有其他主要区别吗?是否有建议我从一个"MVC ASPX"引擎开始应用程序,而不是一个"Razor"引擎? - Dan P
嗨,我想知道我们能否用Razor编写多层应用程序。 - fc123

4

Razor是微软内部扩展的ASP.NET MVC。您似乎认为Razor由社区提供或者是MVC基础组件的分支,这完全是错误的。Razor还可以提供比ASPX更加语法清晰的代码。


那么,按照你的思路,如果“Razor”是MVC的MS实现,它很可能会成功地被纳入下一个版本的VS中? - Dan P
Razor不是Visual Studio的东西。它是ASP.NET MVC框架的核心组成部分。微软将在ASP.NET MVC4中发布Razor V2,所以它不会消失。 - Chris
Razor是微软对其丑陋表亲Spark的回应。Web Forms也不会消失,但这证明了什么呢?我还没有看到一个单一有说服力的理由来使用Razor,除了它是最新的“潮流”之外。它打开了与ASP 1.0一样混乱不堪的大门。 - IrishChieftain
@IrishChieftain,您能详细说明为什么这不会帮助解决 ASP 1.0 的任何问题吗? - Dan P
1
代码不应该与标记放在同一个位置——考虑维护。这是 Web 开发的基本规则,我认为没有理由为了时尚而违反这一规则。到目前为止,我还没有看到使用 Razor 的充分理由。 - IrishChieftain

1

你所依赖的“额外第三方dll或代码”已经被广泛应用,绝对是必须包含的。你只需要复制一次,然后就可以忘记它了。而且你也不必费力去寻找它们,使用Xcopy部署非常容易。

正如你所看到的,MS MVC网站使用Razor。我阅读的大多数(甚至全部?)网站和书籍都在使用Razor。

在MVC中使用Razor,你会发现比使用aspx更容易获得帮助。


我的担忧是Razor是最新和最酷的技术,但在下一个VS中可能会被替换。我以前就碰到过这种情况。如果我要采用这项技术,我需要知道它是否会存在,并且不会被“MS Razor 2”所取代。相比于MS的MVC,Razor有什么特别之处? - Dan P
Razor 微软技术。此外,Razor V2已经计划与ASP.NET MVC4一起发布,但不应该存在向后兼容性问题 - 它是现有基础的扩展,而不是新的语言语法。 - Chris
1
Dan P,我完全理解你的想法。在我的.NET生涯中的前7年里,由于Microsoft最新和最伟大的数据网格、Web范例或基础类的迭代次数太多,我基本上试图避免任何“内置”东西。但是现在,他们似乎确实通过MVC来解决这个问题了。我确实倾向于回避Entity Framework、Castle或与DB抽象有关的任何其他东西。但是MVC的东西似乎非常准确。 - Matt Dawdy
谢谢,你完全理解了我的痛点。我已经是一名开发者15年了。Silverlight是我最大的失败之一。如果iPhone和亚马逊的Kindle Fire采用它,我仍然认为这是一个很好的概念...但它从未成为Windows承诺的无处不在的东西。现在似乎事情又转回到了HTML和HTML5,这就是为什么我想重新点燃对HTML和MVC知识的兴趣。感谢你与我共同分享这种经历 :) - Dan P

-8
Razor 是你可能对标记做的最不规范的事情。代码和标记不应该在同一个文件中,这是绝对的。我完全无法理解为什么有人会推荐这种疯狂的做法。

5
Razor并不鼓励将代码与标记语言混合,这一点和其他视图引擎并没有什么不同。如果你有这样的想法,那么可能是因为信息有误。在ASP.NET MVC中,核心概念是,如果你想要使用基于代码的逻辑来扩展视图,你应该在一个独立的类文件中编写HtmlHelper扩展。 - Chris
3
我的评论是针对@IrishChieftain的。Razor不比Spark或原始的ASP视图引擎更支持在视图中编写代码。实际上,Razor旨在简化视图标记。IrishChieftan对Razor的恶意攻击是没有根据的,他对原始ASP引擎的支持也是如此。 - Chris
2
@IrishChieftan 你的观点是错误的,因为你所见到的每个Razor示例都将代码嵌入到视图中。如果在视图中看到业务逻辑,那是开发人员的问题,而不是视图引擎的问题。所有工具都可以被滥用。当正确使用Razor时,生成的代码编写速度更快,与等效的<% .. %>块相比,可读性大大提高。我已经广泛使用了两者,我可以报告说,没有理由再使用原始的ASP视图引擎-它是劣质的,没有商量。 - James McCormack
1
“只有工具的傻瓜仍然是傻瓜。”将开发者的错误实现决策与开发技术的实用性相提并论是毫无意义的。 - Ellesedil
1
Razor 是微软的一个愚蠢决定,将我们带回 Web 开发 20 年前。请随意给我点踩。 - IrishChieftain
显示剩余10条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接