我开始学习AngularJS和ASP.NET MVC,但是不确定为什么要在同一项目中同时使用它们吗?
他们不是两个MVC框架吗?我应该在同一应用程序中同时使用它们吗?是不是一个?
我开始学习AngularJS和ASP.NET MVC,但是不确定为什么要在同一项目中同时使用它们吗?
他们不是两个MVC框架吗?我应该在同一应用程序中同时使用它们吗?是不是一个?
Answers:
如果要构建单个页面应用程序(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,也可以根据需要进行混合和匹配。
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。
如果您使用Visual Studio,则有一个新的“单页应用” MVC网站模板,其中包括角度和MVC Web Api控制器。
这很有效,因为您的MVC服务器端代码为json客户端代码提供了json端点。
此外,您可以使用MVC控制器来提供基本的html视图或单页应用程序的视图。这为您提供了服务器端生成,授权,重定向,错误处理等功能。
通常,即使在单页应用程序上,您也会希望少量服务器生成的html / javascript,诸如针对不同环境,不同语言甚至是奇数身份验证页面的端点url之类的东西,它们可能更容易在服务器端执行。