我最近才研究过Ajax(嘲笑我是专家),我对所有增加的功能感到兴奋。但是有一些问题。
表单提交
在Ajax示例中,自动创建json对象(序列化表单)或通过从每个DOM项检索val()手动构建json对象。并使用javascript执行数据验证。我想我们仍然可以使用Html.EditorFor(和Html.TextboxFor等)来构建表单。但是仍然可以使用在model / viewmodel上添加的DataAnnotation属性吗?我见过的MVC + Ajax示例通常不执行任何类型的服务器端验证。可以省略那部分吗?我想这很好,因为用户必须启用javascript才能提交表单。但我们需要一些专业的建议。
查看模型
在Ajax世界中,View Models通常表示为JSON对象。 (如果我错了,请纠正我。)那么,在我们的域模型和视图模型之间进行映射的最佳方法是什么?有没有像AutoMapper这样的工具?
好的,我需要在这里添加一些东西...........
这个问题的原因是我发现一些示例使用名为Knockout.js
(See its website)的东西而不是return Json(model)
将视图模型的json对象返回到{{1} } call,它的例子显示了一个视图模型是用javascript构建的。
// This is a simple *viewmodel* - JavaScript that defines the data and behavior of your UI function AppViewModel() { this.firstName = "Bert"; this.lastName = "Bertington"; } // Activates knockout.js ko.applyBindings(new AppViewModel());
这种做法有什么好处?
----我的更新结束----
感谢您提供任何有用的建议。
答案 0 :(得分:3)
1)不要忽略服务器端验证。 MVC内置了一些功能,可以在服务器端为您完成一些功能,但测试它是否正常工作是个好主意。通常,这只是测试类型,长度,范围和其他一些基本验证。任何复杂的验证都应由您完成。无论哪种方式测试它以确保确实发生了正确的验证。
2)Json最常见,因为它适用于JavaScript,并且很容易在.Net中序列化。我推荐Newtonsoft.Json作为序列化库。您可以使用任何可以解析的语言,从protobuff到XML。
ViewModel是一个模型,它被发送到视图,用于视图所需的内容,通常只有一种方式发送到视图。
域模型是您持久存在的对象,通常从客户端到服务器双向传播。
一个很好的例子可能是您的视图需要当前日期,经理数据和员工数据,因此您的视图模型包含所有这些的属性,但表单只编辑员工,该员工是一个被回送的域模型从客户端到服务器要持久化。
MVC有ModelBinder,可以获取你的帖子数据并将它们变成你需要的任何类型(假设你正确遵循它的约定。)你不太可能必须将视图模型映射到域模型。