我应该同时使用AngularJS和ASP.NET MVC吗?


59

我开始学习AngularJS和ASP.NET MVC,但是不确定为什么要在同一项目中同时使用它们吗?

他们不是两个MVC框架吗?我应该在同一应用程序中同时使用它们吗?是不是一个?

Answers:


75

如果要构建单个页面应用程序(SPA),则可能不需要ASP.NET MVC中的“ MVC” 。视图,尤其是动态视图,很可能是在客户端交付/操纵的。角度手柄就好了。

但也许您不想要100%SPA。那呢 想象一下,有10页,但是10页非常动态。用户登录后,右上角会出现一个小用户徽章。这不是动态的。它仅显示了一些漂亮的内容,例如用户的“得分”和最新的自拍照。您可以缓存这些精美的东西,以便可以轻松检索它们。现在,您可以使用两种方法。如果您是客户端MVC纯粹主义者,则只需在传递初始HTML有效负载后获取徽章数据,就如同其他所有数据一样。但是,也许您不是一个纯粹主义者。也许您是纯粹主义者的对立面。也许你是个帝国主义者。因此,与其提供最初的HTML,不如提供一些JavaScript,这些JavaScript将发布回您的服务器,通过JavaScript进行发布以获取徽章数据,然后最终通过客户端MVC将这些数据合并到视图中,是你最初的HTML。交付初始HTML之后,您将继续进行典型的客户端MVC滑稽动作。

因此,在服务器和客户端上的MVC只是一种方便的方法,可以组织在2001年一团糟的代码。您不必选择一个。您可以选择两者。当然,在交付初始HTML之后,您要做的越多,则对服务器端MVC的需求就越少。不过,如果您需要它,它就会为您服务。例如,我在ASP.NET MVC / Angular应用程序上工作,其中外部Angular模板实际上可能是.NET MVC ActionResult。这意味着您的服务器控制器可以将数据合并到其视图中,然后将其作为模板传递给Angular,然后Angular的控制器可以将其数据合并到视图中。我并不是说这是一个好主意,但这只是表明一种形式的MVC不会使另一种形式过时。

此外,无论您如何部署Angular,您都将需要一种方式来交付初始HTML,模板以及最重要的数据。为什么不使用一个简单的平台呢?有很多,但是.NET MVC并不逊色。就像我说的那样,您可以使初始的HTML和外部Angular模板成为MVC操作的结果,但是更好的是,您可以使用.NET的Web API来传递数据。Web API和杏子蜜饯一样美味。

总结:MVC只是一种模式。您可能要在任意数量的物理层上使用该模式。无法用完。如果有意义,请自由使用。此外,Angular可能也不是MVC(因此,关心这些事情的人说),因此可以将其与带有“ MVC”名称的工具一起使用。地狱,即使它是MVC,也可以根据需要进行混合和匹配。


3
惊人的反应。非常感谢您的解释+1
Natalie 2015年

您能否告诉我,例如是否有一个Web api向我提供数据,并且我想在网格中显示此数据,我是否可以使用Angular或MVC进行循环和模板化?我该如何调用Web api服务?您如何从项目开始时决定要走的路?
娜塔莉2015年

1
@Natalie如果数据来自Web API,则可能是从客户端获取的。这意味着您绑定的是Angular而不是.NET MVC。您不会显式循环。您可以使用ngRepeat将数据绑定到表格/表格。要获取数据,您可能会使用$ http模块并调用Web API端点。至于决定使用哪种方法,这很奇怪。没有黑白答案。您必须进行实验,评估并遵循自己的直觉。
罗杰罗杰(Roger Roger)2015年

...一句话。如果您以前没有使用过Angular或其他可提供全方位服务的JavaScript框架,则需要花一些时间来学习这些知识。它们不一定很简单。不过,我可以向您保证,从长远来看,它们会使您的生活更轻松。努力工作。坚持下去。你会做的很棒。
罗杰斯(Roger Roger)2015年

1
@ScantRoger我很抱歉,但是您的回答并没有为我解决问题。如果我使用的是MVC服务器端框架,而View是不可知的,我如何将Angular与之联系在一起?服务器(Web API)已经包含模型和控制器定义。因此,如果我使用Angular,则会再次受到MVC的限制。那么最终会变成MCVCM ...吗?(无论在客户端和服务器端模型和控制器的定义),或者是我不应该使用的客户端MVC框架,如角度,如果我已经使用了我的Web API一个MVC框架的原因
阿卜杜勒

17

ASP.NET MVC是服务器端框架;不管您使用什么JavaScript库。AngularJS是一个客户端库,它并不关心网站使用哪种服务器端技术,它可以是Python,ASP.NET MVC,甚至是直接存储在磁盘上的老式静态HTML文件。

ASP.NET MVC和AngularJS都是兼容的,并且有很多项目将它们一起使用。

需要同时使用两者吗?并不是的。这完全取决于您的项目需求。

  • 如果您的网站是动态的,则必须使用一些服务器端脚本。您可以使用ASP.NET,而使用AngularJS的事实不会使您的服务器端代码更像MVC。如果希望将服务器端应用程序构造为MVC,则宁愿选择ASP.NET MVC。

  • 同样,您正在使用ASP.NET MVC的事实并不意味着有关客户端代码的结构。您可以将所有JavaScript放在一个文件中,而无需考虑结构,并对此感到满意(直到项目开始发展)。在这里,AngularJS再次将自身展示为在客户端上构建应用程序的一种方式。


旁注:您标记了ASP.NET MVC 3的问题。除非这是您必须维护的遗留项目,或者在过去四年未更新的遗留服务器上托管应用程序时遇到特定限制,否则可以使用ASP .NET MVC 4或5。


1
谢谢MainMa。我知道AngularJS是客户端,而MVC是服务器端。我也知道其他的库,例如把手,knockoutjs可以在MVC.NET中使用,而Angular可以在php,java应用程序中使用。我要问的是为什么要同时使用它们,因为它们都做相同的事情,即“ MVC”,但是一个是客户端,一个是服务器端。为什么要在客户端和服务器端混合使用MVC框架?我们不能做一个只有Angular应用程序的应用程序吗?还是只有MVC.net应用程序的应用程序?
娜塔莉2015年

@Natalie:我明白了。我编辑了答案,以提供有关此的更多信息。简短的回答是,您可以在项目中混合使用这两个框架,以便在服务器端和客户端都具有特定的结构。
Arseni Mourzenko 2015年

您能否告诉我,例如是否有一个Web api向我提供数据,并且我想在网格中显示此数据,我是否可以使用Angular或MVC进行循环和模板化?我该如何调用Web api服务?您如何从项目开始时决定要走的路?
娜塔莉2015年

我心里有同样的问题。我根本找不到使用asp.net MVC的理由。我的意思是,看起来像服务器端的Asp.net Web API和客户端的Angular就足够了。但是我首先想到了;Web API =数据访问层,Asp.Net MVC =业务逻辑层,Angular = UI层。但是从Angular方面,我们只能进行Web API调用,因此我们不能使用Asp.Net MVC服务器端。我认为我们需要一个很好的例子来说明为什么我们可能需要使用Asp.Net MVC。
Salim

9

如果您使用Visual Studio,则有一个新的“单页应用” MVC网站模板,其中包括角度和MVC Web Api控制器。

这很有效,因为您的MVC服务器端代码为json客户端代码提供了json端点。

此外,您可以使用MVC控制器来提供基本的html视图或单页应用程序的视图。这为您提供了服务器端生成,授权,重定向,错误处理等功能。

通常,即使在单页应用程序上,您也会希望少量服务器生成的html / javascript,诸如针对不同环境,不同语言甚至是奇数身份验证页面的端点url之类的东西,它们可能更容易在服务器端执行。


1
在VS 2015 CE中创建标准SPA模板时,我在脚本文件夹中看到bootstrap,jquery,knockout,response和sammy,但没有角度。我想念什么吗?
TK-421

2

3年后,请使用ASP.NET Web API来提供数据,并使用Angular(js或更高版本)在客户端上构建应用程序。如果要创建静态站点,则只需使用ASP.NET MVC。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.