【问题标题】:MVC5 vs Angular JSMVC5 与 Angular JS
【发布时间】:2017-01-14 19:50:14
【问题描述】:

我已经使用 ASP.NET MVC 大约一年了。我喜欢使用以下工具创建 SPA 的能力:

  1. 部分视图(通过 html.action() 和 renderPartial())
  2. Ajax 助手(Ajax.Actionlink() 和 Ajax.beginform())

我的问题是,在没有 JavaScript 框架的情况下继续运行是否安全,或者我是否因为不使用 Javascript framework (如 Angular JS)而严重错过了某些东西。

【问题讨论】:

    标签: javascript asp.net angularjs asp.net-mvc asp.net-mvc-5


    【解决方案1】:

    这取决于您正在构建的应用程序的很多类型,但通常您不必在 ASP.NET MVC 和 Angular 之间进行选择,您可以在一个项目中同时使用这两者。 例如,如果您有一个带有网格的页面,用户将在其中添加行并且您必须计算总和等,您可以在该页面上使用 angular(这将加快开发过程)。 但是,如果您有包含静态内容的页面,您可以使用 ASP.NET MVC 提供一个 html 文件。 你甚至可以同时使用它们。对于博客文章之类的内容,您可以使用静态 html 文件作为文章内容,然后使用 angular 实现 cmets。

    【讨论】:

    • 谢谢罗伯特,这很有见地。您能否就我可以用来学习如何将 Angular 与 .NET MVC 混合使用的最佳资源提供任何指导?
    • 这在很大程度上取决于您正在构建的项目类型。我认为学习如何混合它们的最好方法是做一个纯粹的 Angular 项目(例如一个 WEB API 2 + Angular 项目),然后你会更好地理解何时使用一个或另一个。另一种选择是使用 React.js,然后使用 React.net,这将允许您首先在服务器上渲染视图,然后在浏览器上渲染视图。
    • Angular + web api 2. 完美!
    【解决方案2】:

    由于 ASP.NET 是一个服务器端框架,它只能做到 AJAX 插入。 Angular JS 是一个客户端框架,专为 SPA 设计。如果你想要一个轻量级的 SPA,ASP.NET 会做得很好,但我认为你应该使用正确的工具来完成正确的工作。不要犹豫,将它们混合在一起,以便在服务器端渲染和客户端动态之间找到合适的位置。

    【讨论】:

    • 感谢您的评论亚历山大。根据我的理解,当混合 Angular 是 .NET 时,我将无法使用部分视图,但必须使用 Angular 视图。所以 .NEt 只会处理服务器端,而 Angular 会处理客户端,我的理解是否正确?
    • 不,不完全是。您仍然可以使用部分视图,因为它们在您首次加载页面时直接呈现到响应中。 Partials 有两个目的:提供一种重用 HTML 片段的方法,并使您的标记更清晰,并在必要时发送 html 片段作为响应。换句话说,您可以请求 MVC 提供的部分作为 HTML 片段,实际上也可以是角度视图。例如,此解决方案允许您根据角色控制视图的可用性。因此,您可以向管理员提供一些角度视图,但不能向普通用户提供。
    • @Balázs 正是我会回答的。归根结底,HTML 就是 HTML,您有权根据安全性和搜索引擎优化约束来决定应该在何时何地计算和呈现它。
    【解决方案3】:

    你肯定错过了一些东西。

    诸如 Angular 之类的框架的目的不仅仅是处理引导选项卡切换或仅显示部分 UI 而不是所有内容的任何东西。当然,你可以利用这样的逻辑来创建小而简单的 SPA,但是一旦你开始创建现实世界的应用程序,这种方法将变得无法使用。原因如下:

    • 您的网站将非常难以维护
    • 像 Angular 这样的框架提供的不仅仅是模板(稍后会详细介绍),还提供了路由等功能,它允许按需加载内容。也就是说,您可以按需加载 HTML 片段,而不是将整个页面发送给客户端(其中大部分内容他可能根本不会看),从而减少了网络使用量。想象一下,您必须在 Facebook 上下载所有内容(帖子、图片、视频、聊天消息等)并隐藏它们,直到您真正想看到它们为止。

    回到模板,这是一个非常强大的功能。同样,对于简单的应用程序,您可以使用自定义 JS 代码 - 即连接字符串以创建 HTML 片段,然后将它们插入 DOM。但即使使用简单的应用程序,这也是一件很糟糕的事情。想象一下,您必须编写自定义 JS 来连接您在 Facebook 等应用程序中的聊天消息,然后将它们插入 DOM。例如,使用 angular2,您可以执行以下操作:

    <ul>
      <li *ngFor="let msg of messages">{{msg.Sender}} said: {{msg.Content}}</li>
    </ul>
    

    这样,Angular2 将为您完成所有的解析和 DOM 处理。也就是说,您为要显示的内容编写声明性标记而不是命令式逻辑。

    总而言之,它们可以帮助您将逻辑与 UI 分离,因此如果您想创建丰富的应用程序,您绝对应该深入研究任何流行的框架并体验它们的功能。你不会后悔的。

    【讨论】:

    • 感谢 Balazs,您的回复非常有用。什么是了解使用 Angular 按需加载内容的可靠资源,这是我将要研究的内容!
    • 谢谢!非常感谢
    猜你喜欢
    • 2017-10-24
    • 2017-01-06
    • 1970-01-01
    • 1970-01-01
    • 2016-03-20
    • 2014-06-26
    • 1970-01-01
    • 2013-04-26
    • 2018-03-07
    相关资源
    最近更新 更多