Jquery 关于ASP.NET MVC3中使用Ajax的问题

Jquery 关于ASP.NET MVC3中使用Ajax的问题,jquery,ajax,asp.net-mvc-3,Jquery,Ajax,Asp.net Mvc 3,我最近才开始研究Ajax(专家们,笑我吧),我对所有添加的功能感到兴奋。但也有一些担忧 提交表格 在Ajax示例中,json对象可以自动创建(序列化表单),也可以通过从每个DOM项检索val()手动构建。并使用javascript执行数据验证。我认为我们可能仍然可以使用Html.EditorFor(和Html.TextboxFor等)来构建表单。但是仍然可以使用添加到模型/视图模型上的DataAnnotation属性吗?我看到的MVC+Ajax示例通常不执行任何类型的服务器端验证。省略那部分可以

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

  • 提交表格

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

  • 视图模型

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

    好的,我需要在这里添加一些内容

    这种担心的原因是,我发现一些示例使用名为
    Knockout.js
    的东西,而不是
    return Json(model)
    来将视图模型的Json对象返回到
    $。Ajax
    调用,其示例显示视图模型是在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()); //这是一个简单的*viewmodel*-JavaScript,用于定义用户界面的数据和行为 函数AppViewModel(){ this.firstName=“Bert”; this.lastName=“Bertington”; } //激活knockout.js 应用绑定(新的AppViewModel()); 这种做法有什么好处

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

  • 谢谢您的建议。

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

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

    ViewModel是发送到视图的模型,用于视图所需的内容,通常仅单向发送到视图

    域模型是持久化的对象,通常是从客户端到服务器的双向传播

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

    MVC有一个ModelBinder,它可以将您的post数据转换为您需要的任何类型(假设您正确地遵循其约定)。您不太可能需要将viewmodels映射到域模型。

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

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

    ViewModel是发送到视图的模型,用于视图所需的内容,通常仅单向发送到视图

    域模型是持久化的对象,通常是从客户端到服务器的双向传播

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


    MVC有模型绑定器,可以将您的post数据转换为您需要的任何类型(假设您正确遵守其约定)。您不太可能需要将viewmodels映射到域模型。

    忽略服务器端验证是绝对不好的。blaise,正如我在thinking sites reply中提到的,Automapper将以两种方式(如果确实需要的话,即通常情况下,在发送到视图之前,您会将域模型映射到viewmodel。99%的情况下,通过httppost返回的模型将是您的域模型)忽略服务器端验证是绝对不可能的。blaise,正如我在thinking sites回复中提到的,Automapper将以两种方式满足您的所有需求(如果确实需要,即通常情况下,您会在发送到视图之前将域模型映射到viewmodel。99%的情况下,通过httppost返回的模型将是您的域模型)。感谢您的回复。我的理解是视图模型是一个数据传输对象。提交表单时,收集的值首先填充到视图模型中(对于该视图)。但是域模型可能有其他属性,或者有时需要一些数据转换(例如将string[]数组转换为字符串以存储在数据库中)。在这种情况下,我们将不得不在viewmodels和domain models.blaise之间映射这些属性。如果您需要复杂(或简单)的映射,请查看AutoMapper。做你需要的一切,然后再做一些!!如果您愿意,您可以使用视图模型从表单中返回,没有任何错误或不正确的地方,是的,如果您愿意,您可以使用automapper。我记不起我曾经发过一个mod