ASP.Net MVC与HTML + KnockoutJS + WebAPI

时间:2012-08-14 19:29:17

标签: jquery architecture knockout.js asp.net-mvc-4

我想知道为什么不在ASP.Net MVC 4 Web项目中使用静态HTML文件,这些文件使用jQuery + jQuery模板+ KnockoutJS组合消费基于REST(Azure上托管的ASP.Net MVC 4 WEB API和安全使用) ACS)。 Web API可以使用Entity Framework并返回可以使用$ .ajax()检索并使用KnockoutJS绑定的JSON序列化对象。

ASP.Net MVC(用于网页)提供了什么,为这种架构增加了价值? 在我的头脑中,我能想到:

  1. 多设备支持(设备检测和模板更换)
  2. 提交数据的服务器端验证(不确定,因为我也可以将验证放在WEB API上?)
  3. 即使我使用的是静态html文件,我仍然可以重写我的URL(因为我还是使用ASP.Net MVC)。
  4. 有人可以帮助我更好地理解这一点吗?提前谢谢。

5 个答案:

答案 0 :(得分:7)

好问题。我肯定发现我的MVC / Razor代码随着我的Knockout项目的进展而变得越来越少,但我想我总是会看到一些我想在服务器端确定的视图方面。

基本的上下文内容,例如是否在布局页面中呈现登录/注销面板,与角色相关的决定应该可以访问的内容等等。我想如果你对你的安全性足够小心并且实施了足够的保护代码服务器当有人真正尝试做某事时你可以在Knockout中实现大部分功能,但是你可能最终会遇到大量的膨胀,为视图的每一个可能部分提供服务。

这可能取决于您的应用程序,但我认为对于大多数Web应用程序而言,在服务器呈现时间应该确定的内容与客户端应该执行的操作之间存在相当常识。

如果不出意外,您可能希望视图中的链接等被搜索引擎编入索引。如果你在JSON中传下你的“最新10个产品”并在Knockout模板中使用超链接渲染它们,你就会失去它。

答案 1 :(得分:3)

这是一个使用正确工具的问题。

从使用淘汰赛进行开发后我所知道的,它的真正力量来自于可观察量和实时DOM更新。这使得客户端应用程序中的丰富界面可以更快地创建,并且更易于管理。但是,与使用直接Razor页面相比,它仍然更耗时且更难实现。所以Knockout JS对某些应用程序来说是一个优势,在这些应用程序中,许多数据驱动的UI更新需要“ajaxically”发生,但对其他人来说会过度。

答案 2 :(得分:1)

如果客户端在此方案中未启用Javascript,则您的网站将毫无用处,您将无法为其提供合适的替代方案。

使用MVC Framework和Razor语法,您仍然可以构建动态生成的数据驱动内容,而无需使用jQuery或AJAX。无论您是否启用了Javascript,MVC都会为您提供模型与View之间关注点的清晰分离。

答案 3 :(得分:1)

安全性可能是我看到的头号优势。你仍然有ASP.NET背后的结构。是的,它是真的,在你的视图中,你当然可以使用剃刀语法并使用Knockout渲染你的视图模型,而JSON.NET使数据绑定比以往更容易。最终,未来MVC可能不会成为未来的一部分吗? (查看Meteor js,它的邪恶酷,并且除了javascript atm之外,其他任何其他都无法实现这种类型的动态模型绑定。)

另外,如果你想看到它的实际应用,我找到了一个很好的Codeproject,它带有MVC和淘汰赛。 http://www.codeproject.com/Articles/424642/Customer-KnockoutJS-and-MVC-demo-using-JSON

答案 4 :(得分:1)

此处read this。引用它:

  

围绕整页加载构建Web应用程序已经不够了   然后“逐步增强”它们以更动态地表现。   构建快速,响应和现代的应用程序需要您   完全重新思考你的方法。

关于你的问题,MVC提供什么为MVVM架构增加价值?将自定义内容托付到不同的设备可能是一个优势,但您也可以通过CSS媒体查询在一定程度上实现这一点。决定了您要从服务器发送到设备的字节数。

您也可以在不使用MVC或WebAPI的情况下进行服务器端验证,并且不需要使用ModelBinder或ModelState.IsValid来执行此操作。查看类似FluentValidation.NET的内容,它允许您在服务器上执行高度​​复杂的输入验证,甚至是Web / HTTP层下面的一层。当然,您还需要使用jQuery validate等验证客户端。

我同意这里的其他答案,在服务器(控制器动作或剃刀)级别上做一些安全级别的东西更容易一点,更“值得信赖”。但是这里没有人提到MVVM的可测试性。围绕控制器动作或其他服务器端代码编写单元测试非常容易。这并不是说你不能单元/集成/ UAT测试MVVM应用程序,只是它需要更多的努力IMO。