作为 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 支持,但似乎已经死了:Upshot.js 的当前状态
-- Breeze.js ( http://www.breezejs.com/ ) 似乎是一种接管那里的尝试,尽管我担心它是相当新的并且还没有被广泛采用。
最终,让我觉得我错过了一个明显的替代方案的事情是,所有的部分都已经明确地内置在 MVC4 中。例如,当您使用表单视图时,您的字段将数据绑定到控件,并且在提交表单时,会创建一个并行 JSON 对象,将其发送到控制器,然后为您解析为您的 POCO ViewModel 对象。这基本上就是我正在寻找的往返(尽管保留了完整的 JSON 对象客户端)。处理这个问题的“正确”方法是什么?