当涉及复杂类型时,你如何处理ajax和模型绑定?

时间:2009-07-16 14:42:54

标签: sql-server asp.net-mvc ajax model-binding complex-data-types

我希望在从我的视图执行ajax调用时保持模型绑定。我正在使用jquery ajax来进行调用,仅作为示例 - 这是我想从ajax调用的控制器方法:

public ActionResult Create(Person personToCreate) {
    //Create person here
}

如您所见,此方法依赖于Model Binding。这使得该方法更加清晰......但是,这意味着当ajax进行调用时,它必须提供DB中不可为空的所有变量。

所以,如果我有一个名为Person的表,它有变量:

firstName varchar(25) not-null
lastName  varchar(25) not-null
myPet     int         not-null <-- This is a foreign key

然后创建的Entity Framework类{:1}类似于:

Person

由于所有变量都不能为空(如DB中所指定),这意味着ajax调用必须提供public class Person { public string firstName { get; set; } public string lastName { get; set; } public Pet myPet { get; set; } } string firstNamestring lastName。但javascript无法提供Pet ...

所以我只有两个选项(我知道):

  1. 允许myPet在数据库中为空

  2. 创建一个“flatter”类,表示不需要宠物对象的Person ...

  3. 即:

    Pet myPet

    第一个选项的问题是,修改数据库似乎很奇怪...肯定是错误的,因为它允许它不应该是......

    第二个选项的问题是我有很多类,为了避免这种情况,为每个类编写重复的类似乎很广泛......如果我有30个类,那将是30个重复的类我必须创建才能允许模型绑定。

    任何人都可以考虑任何更好的选择,或者为什么一个选项比另一个更好?

1 个答案:

答案 0 :(得分:2)

这里真正的技巧是将视图模型类与实际模型类分开。视图模型类往往更简单一些,您需要在使用它们之前将它们映射回实际的模型类。像AutoMapper这样的工具可以让它变得非常简单。