基于Razor的MVC与MVC 4中的单页应用程序

时间:2012-05-10 01:39:50

标签: ajax json asp.net-mvc-3 razor

我曾经使用MVC 3 Razor引擎来渲染页面。有时我不得不使用AJAX调用来传输Razor呈现的HTML并使用JQuery将其插入到页面中。随着新项目的开始,我们考虑使用对我们来说是新的MVC 4单页面应用程序框架。我第一眼就看到了这让我心情复杂:   一方面,它意味着所有数据都由JSON传输,客户端完成所有工作以呈现它们并编码一些与UI相关的逻辑,这对于服务器和网络性能非常有用。另一方面,客户端(HTML + JavaScript)变得更加沉重,其中包含一堆魔术字符串和隐藏的关系,这似乎很难维护。我们已经习惯了VS intellisense,类型安全的.NET服务器代码来渲染我们必须交换客户端脚本的页面和SPA的Knockout绑定语句。

我想知道使用SPA与Razor相比有什么先锋和缺点,还有我在这里提到的这个显而易见的问题吗?感谢

2 个答案:

答案 0 :(得分:17)

Razor是一种基于服务器的技术,其中SPA(单页应用程序)是客户端(Web浏览器)上使用的架构方法。两者都可以一起使用。

从高层次来看,SPA会将渲染和数据检索移动到客户端。 Web服务器成为位于数据库前面的服务层。使用SPA时,MVC模式效果最佳。可以使用像Knockout.js和Backbone.js这样的框架。最终结果是丰富的响应式桌面体验。

要实现这一点,你需要成为一名血统的javascript程序员或者愿意学习javascript。

是的,它正在将业务需求从C#转移到javascript中。在Visual Studio中,javascript的智能感有限。为了对您的javascript充满信心,您需要依靠单元测试。好的一面是丰富的用户体验(想想gmail或谷歌地图)。

答案 1 :(得分:4)

我认为听起来你已经很好地了解了这里的大部分权衡因素;您将通过SPA减少网络负载,并将处理的一部分转移到客户端。但是,您将增加代码的复杂性,并使得轻松维护系统变得更加困难(仅仅因为复杂性增加 - 而不是由于SPA中固有的任何架构问题)。

要记住的另一件事是兼容性。我之所以提到错误的选择"在我对你的问题的评论中,为了让网站对于禁用Javascript的人来说可用,你仍然需要提供常规的整页视图。这也是为了SEO而做的好主意;爬虫将以禁用JS的用户身份浏览您的站点,然后可以为您的站点编制索引。然后,该站点应该正确处理这些传入的URL,以便那些启用了JS的人会发现自己在SPA中查看相同的内容(而不是被放入"没有JS"不必要地查看)。

我还提到了其他一些可能有助于实现上述目标的事情,但它打破了SPA的理想;也就是说,在某些地方使用Ajax加载的部分,而不是JSON数据。例如,假设您有一个典型的"联系电子邮件"网站上的表格;您希望在SPA的上下文中加载,但通过AJAX加载部分可能更容易。 (虽然肯定,是的;您可以使用JSON对象来描述要在电子邮件表单中显示的字段)。

内容也可能更多内容"比'&34;数据",您可能仍希望通过partials和Ajax加载。


SPA绝对是一个有趣的项目,我即将自己部署一个。我在其中使用了JSON和partials的混合,但这可能不是你自己的选择。