0

我最近才研究了 Ajax(专家们笑我),我对所有添加的功能感到兴奋。但有一些担忧。

  1. 表单提交

    在 Ajax 示例中,一个 json 对象要么自动创建(序列化表单),要么通过从每个 DOM 项中检索 val() 手动构建。并且使用javascript执行数据验证。我认为我们可能仍然可以使用 Html.EditorFor (和 Html.TextboxFor 等)来构建表单。但是是否仍然可以使用模型/视图模型上添加的 DataAnnotation 属性?我见过的 MVC+Ajax 示例通常不执行任何类型的服务器端验证。可以省略那部分吗?我想这很好,因为用户现在必须启用 javascript 才能提交表单。但是我们需要一些专业的建议。

  2. 查看模型

    在 Ajax 世界中,视图模型通常表示为 JSON 对象。(如果我错了,请纠正我。)那么,在我们的域模型和视图模型之间映射的最佳方式是什么?有没有像 AutoMapper 这样的工具?

    好的,我需要在这里添加一些东西............

    引起这种担忧的原因是我发现一些示例使用了一些名为Knockout.js (参见其网站)的东西,而不是return Json(model)将我们的视图模型的 json 对象返回到$.Ajax调用中,它的示例显示视图模型是用 javascript 构建的。

    // 这是一个简单的 *viewmodel* - 定义 UI 数据和行为的 JavaScript
    函数 AppViewModel() {
        this.firstName = "伯特";
        this.lastName = "伯廷顿";
    }
    
    // 激活 knockout.js
    ko.applyBindings(new AppViewModel());
    

    这种做法有什么好处?

    ----我的更新结束----

感谢您提供任何有用的建议。

4

1 回答 1

3

1) 不要忽略服务器端验证。MVC 有一些内置功能可以在服务器端为您完成其中的一些工作,但最好测试它是否正常工作。通常这只是测试类型、长度、范围和其他一些基本验证。任何复杂的验证都应该由您完成。无论哪种方式都进行测试以确保确实发生了正确的验证。

2) Json 是最常见的,因为它与 JavaScript 一起使用并且易于在 .Net 中序列化。我推荐 Newtonsoft.Json 作为你的序列化库。但是,您可以使用任何可以解析的语言,从 protobuff 到 XML。

ViewModel 是一个模型,它被发送到视图,用于视图需要并且通常只以一种方式发送到视图。

域模型是您持久保存的对象,通常从客户端到服务器双向传输。

一个很好的例子可能是您的视图需要当前日期、经理数据和员工数据,因此您的视图模型包含所有这些属性,但表单仅编辑从客户端发回的域模型员工到要持久化的服务器。

MVC 具有 ModelBinders 可以获取您的发布数据并将它们转换为您需要的任何类型(假设您正确遵循它的约定。)您不太可能必须将视图模型映射到域模型。

于 2012-05-01T14:16:59.133 回答