【发布时间】:2012-10-04 16:58:16
【问题描述】:
作为 web 开发和 MVC4 的新手,我反复遇到相同的设计问题,希望有人能告诉我什么是正确/支持/等等。在 MVC4 世界中的解决方案是:
基本上,我已经使用了视图模型 koolaid,并且我的项目中的每个视图都有视图模型,其中大部分是在单页应用程序的某些内容上动态更新的部分子视图。一切顺利生成/渲染视图,然后用户在客户端更新了许多值,是时候更新服务器了。
举个例子,假设它是一个简单的容器视图模型:
public class Data {
public List<Prop> Props { get; set; }
}
public class Prop {
public string Id { get; set; }
public int Value { get; set; }
}
假设用户正在向容器中添加新的道具。如何将修改后的对象返回到服务器?
到目前为止:如果服务器实时同步很重要,我可以对服务器上的每个添加/更新进行调用,然后在客户端上保持同步,或者只是让服务器返回更新后的视图。对于这样的简单场景,一切都很好。
但我经常发现自己希望客户端能够操纵对象(通过视图/js/等),并且在完成并提交之前我真的不需要在服务器上进行更新.我真正想要的是能够将对象与渲染视图一起传递,通过 Javascript 与之交互,然后在完成所有操作后将对象传递回控制器。我该怎么做? (抱歉,我花了一段时间才明白这一点!)
我见过的替代方案:
-- Quick & Dirty (Encode viewmodel properties to JavaScript in Razor):这肯定会将对象放在客户端上的 javascript 中,尽管只是将整个对象序列化到客户端 html 中而无需任何验证等似乎有点骇人听闻。 (虽然我最终确实意识到这就是对象如何使其下降的方式,但您似乎绕过了整个 MVC4 对象处理/解析。)
-- Upshot.Js 似乎曾经有过 MS 支持,但似乎已经死了:Current status of Upshot.js
-- Breeze.js (http://www.breezejs.com/) 似乎是试图接管那里,尽管我担心它是相当新的并且还没有被广泛采用。
最终让我觉得我错过了必须是一个明显的替代方案的事情是所有部分都已明确内置到 MVC4 中。例如,当您使用表单视图时,您的字段将数据绑定到控件,并且在提交表单时,会创建一个并行 JSON 对象,将其发送到控制器,然后为您解析为您的 POCO ViewModel 对象。这基本上是我正在寻找的往返(尽管保留了完整的 JSON 对象客户端)。处理这个问题的“正确”方法是什么?
【问题讨论】:
-
你看过Knockout.js吗?它直接集成到 MVC4 中。
-
我有。但在我看来,需要复制他们的模型是客户端的淘汰模型。还是我误会了?最终,我认为客户端框架将成为解决方案是正确的,但我还没有找到一个“利用”服务器端视图模型的框架。即使在这个简单的示例中,您仍然会创建模型客户端/应用绑定/等。对吗? (但是您可以将该模型发送回服务器,如果您将所有内容命名为相同,则返回到服务器对象的映射应该很清楚 - 所以这绝对是接近的。)
-
实际上,我认为您是对的,我需要进一步探索一下。例如:stackoverflow.com/questions/10866285/…(@Mathletics:如果您想发表您的评论作为答案,我会接受,并将返回我找到的评论。)
标签: javascript asp.net-mvc asp.net-mvc-4 mvvm breeze