【问题标题】:Asp.Net Webforms Vs Asp.Net WebSite(Razor) Vs Asp.Net MVCAsp.Net Webforms 与 Asp.Net WebSite(Razor) 与 Asp.Net MVC
【发布时间】:2012-07-07 23:58:24
【问题描述】:

我认为微软必须有理由使用 RAZOR 语法来增强 ASP.Net。

在 Visual Studio 的 创建新网站项目 对话框中,还有另一个用于创建 ASP.Net (Razor) 的选项。我第一次遇到 Razor 这个术语是在我阅读一本关于 Asp.Net MVC 的书时,我不知道它存在于 ASP.Net 中

我知道在 MVC 3 中引入的 Razor 语法的用途。在问这个问题之前,我决定为 ASP.Net (Razor) 创建一个测试项目,看看它与普通的 ASP.Net 网络表单和ASP.Net MVC。我发现没有像 MVC 中那样的 Model/View/Controllers 文件夹。

我发现母版页指定不同,母版页更干净,没有<asp:ContentPlaceHolder />

但我的问题是:

  • 我注意到它使用了.cshtml,没有更多的代码隐藏了吗?
  • ASP.Net (Razor) 和 ASP.Net MVC 的异同
  • 是否可以扩展为像 ASP.Net MVC 一样的功能,例如添加控制器?视图/模型,我猜是自定义路由?
  • 当我们有 ASP.Net MVC 时为什么会存在这种情况?这不会鼓励人们不愿意迁移到 ASP.Net MVC 吗?
  • 为什么选择 ASP.Net+Razor 而不是 ASP.Net MVC?

更新: ASP.NET Web Pages in particular was designed 方便 已经了解 HTML 的人可以将服务器处理添加到他们的页面。 对于学生,爱好者,一般人来说,这是一个不错的选择 编程新手。对于开发人员来说,它也是一个不错的选择 具有非 ASP.NET Web 技术的经验

更新 ASP.NET Web Pages ASP.NET Web Pages 面向想要一个简单的 Web 开发故事的开发人员,类似于 PHP。在网页模型中,您 创建 HTML 页面,然后按顺序将基于服务器的代码添加到页面中 动态控制该标记的呈现方式。网页是 专门设计成一个轻量级框架,它是 对于了解 HTML 但可能 没有广泛的编程经验——例如,学生或 爱好者。对于了解 PHP 或 开始使用 ASP.NET 的类似框架。

Asp.Net Web Pages

拜托,我需要您的技术意见。 谢谢。

【问题讨论】:

    标签: asp.net .net asp.net-mvc razor


    【解决方案1】:

    这是一个很好的问题。首先,让我们来描述 Razor。

    Razor 是一个解析服务器端代码并​​发出 Html 的引擎,就像 ASP.NET Web 窗体一样,只是具有不同的并且可以说更精简和简洁的语法。

    Razor v. Web 窗体侧边栏:在 ASP.NET Web 窗体中,您必须确定何时要使用 ''。我喜欢 ASP.NET Web 窗体,但这很笨重。使用 Razor,您可以确定何时要使用 '@' 开始编写服务器代码,然后在下次开始编写服务器标记(以 '

    ASP.NET Web Pages 是一个用于创建简单 Web 应用程序的框架。 ASP.NET MVC 是一个使用模型-视图-控制器 (MVC) 模式使用 Web 窗体或 Razor 引擎创建 Web 应用程序的框架。 ASP.NET Web 窗体是一个使用 Web 窗体呈现引擎创建 Web 应用程序的框架。

    最终目标是根据正在构建的应用程序的复杂程度提供选择。了解每一项有助于您为您的应用做出正确的选择。

    其他链接:

    【讨论】:

    • 你的解释很好。你提出了你的观点,但这还不够。 在 ASP.Net (Razor) 中使用服务器控件/用户控件怎么样? ASP.Net (Razor) 项目几乎看起来像一个空的 ASP.Net MVC 项目。您可以多快将其转换为 ASP.Net MVC? - 技术
    • MVC 中有并行用户控件的部分视图。在我看来,你不会从一个转换/转换到另一个。只是重建。尽管您可以共享视图。 Web 编程有两个部分,确定您将在页面上显示的内容 (C#) 以及在页面上实际呈现它。我不能在一篇文章中教你关于所有 3 的所有内容。不好意思说。更多信息asp.net/mvc/mvc3
    • 我们为什么要将服务器端代码与标记混合使用,那一定是维护的噩梦?
    • 有许多不同的应用程序,其复杂程度和复杂程度各不相同。在一些简单的场景中,开发人员不想弄乱单独的代码文件。这些不是您可能习惯使用的模式,但这并不意味着它们无效。请参阅 WebMatrix 上的 ScottGu 博客文章。这是一个快速建立简单网站(博客、CMS 等)的工具。添加到上述回复的链接
    【解决方案2】:

    在MVC模式中,M是Model,C是Controller,V是View。因此,很自然地,在 ASP.NET MVC 模型中,存在 View Engine 的概念。 Razor 只是提供的视图引擎之一。开箱即用的另一种是“旧的”WebForms(顺便说一句,您也可以编写自己的视图引擎)。所以 Razor 没有代码隐藏的概念,代码隐藏在 WebForms 视图引擎边界内。

    所以这有点说明了一切。 Razor 处理 MVC 的 View 部分(如果您选择使用它而不是 WebForms 之一)。它与 M 或 C 无关。

    就个人而言,如果您选择 ASP.NET MVC 模式,或者使用没有 MVC 的普通 WebForms,我肯定会选择 Razor View Engine,因为 Razor 的设计比 Webforms 更简洁,更易于使用。它也只是较新,所以它试图......只是更好:-)

    附带说明,Razor Parser 也可以在 ASP.NET MVC 的外部使用。它是在一个完全不依赖 MVC 或 Web 程序集的程序集中实现的。有关更多信息,请参见此处:http://www.west-wind.com/weblog/posts/2010/Dec/27/Hosting-the-Razor-Engine-for-Templating-in-NonWeb-Applications

    【讨论】:

    • 当您说“Razor 只是提供的视图引擎之一”时,您指的是 razor 语法吗?现在有一个单独的 Razor 页面概念,它是 Web 表单的演变。
    • @variable - 我将其称为 MVC 视图引擎(在 MVC 术语中),即语法 + 解析器 + UI 引擎。那时,Razor 仅由 MVC(ASP.NET 的扩展)提供。现在有了 ASP.NET Core Razor 页面,Razor 视图引擎和 Winforms 的演变或多或少都消失了。
    【解决方案3】:

    默认情况下没有代码隐藏,但您可以轻松地让您的 razor 文件继承自您的自定义类:

    @inherits Index
    

    然后

    public class Index : WebViewPage { }
    

    (更多信息:http://www.compiledthoughts.com/2011/01/aspnet-mvc3-creating-razor-view-engine.html

    这更像是一种老式的 web 方式,更像 asp3。与 mvc 的不同之处在于,mvc 提供了一个庞大的框架来支持现实世界的应用程序(使用路由、控制器和操作,而不仅仅是“标记中的代码”)。

    我认为它的存在是为了制作非常简单的东西,但我实际上并不知道......

    最后,我总是选择 asp.net mvc with razor。

    希望对你有帮助

    【讨论】:

      【解决方案4】:

      嗯,你有两个选择:

      1. 使用 WebForms:使用开箱即用,准备使用服务器端控件(混合标记和业务代码)并使用母版页和皮肤,但面对这些便利所涉及的一些复杂性! :)

      2. 使用 MVC:或使用分离的设计模型,为您提供更有条理的代码库。你可以先做一个设计原型,或者先做一个业务代码,然后再构建另一个方面,相当容易。甚至你可以让设计师对他的工作有更多的控制权,让他/她有能力做他/她想做的一切。 -> 这个是我的首选,因为它让我可以更好地控制我的代码,让我的代码更简洁干净。

      如果您选择了 MVC 模式,那么您将面临另一种选择……查看引擎

      1. 旧的 MVC 视图引擎:还不错,但有点冗长
      2. Razor Engine:它和#1 做的一样,你为什么不想使用它?!它没有取代任何 MVC 模式。它也更加简洁和容易,您既拥有 MVC 的强大功能,又拥有 Razor 引擎的简单性。 Razor 是一种更智能的标记内语法,它可以帮助您专注于您的业务,而不是编写 "

      您还可以仅使用 razor(C# 或 VB)语法编写简单的 asp.net 网页。 (就像 php)

      • 我个人的选择是 MVC+Razor,最佳组合!

      【讨论】:

      • 现在我们有了称为 Razor 页面的 Web 表单的演变。
      【解决方案5】:
      1. MVC 中没有“代码隐藏”,句号。您拥有的是控制器,适用于 Razor 和非 Razor。
      2. 它们只是两种不同类型的标记。 (见下一个答案)
      3. 它不会取代 MVC,它只是另一种选择。传统的标记非常冗长。 Razor 语法简洁。

      【讨论】:

      • 您可以按照与 WebForms 相同的策略进行代码隐藏。 “时期”
      • 他还说它不提供控制器,所以他不是在谈论 Asp.Net MVC (Razor) 项目。
      • 现在我们有了称为 Razor 页面的 Web 表单的演变。
      【解决方案6】:

      为了摆脱 webform、MVC、Razor、WebPages 和更多来自微软的混乱,我更喜欢 html-->javascript-->webapi。

      【讨论】:

        猜你喜欢
        • 2010-10-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-01-13
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多