1

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

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

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

因此,如果我有一个名为的表Person,其中包含变量:

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

然后,创建的实体框架类Person将类似于:

public class Person {
   public string firstName { get; set; }
   public string lastName { get; set; }
   public Pet myPet { get; set; }
}

由于没有一个变量可以为空(如 DB 中所指定),这意味着 ajax 调用必须提供一个string firstName, string lastName, Pet myPet。但是javascript不能提供宠物...

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

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

  2. 创建一个“更扁平”的类来表示不需要宠物对象的 Person...

IE:

public class SimplePerson {
    public string firstName { get; set; }
    public string lastName { get; set; }
    public string myPetName { get; set; }
}

第一个选项的问题是,必须修改数据库似乎很奇怪......肯定有问题,因为它允许做不应该的事情......

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

谁能想到任何更好的选择,或者就为什么一种选择会比另一种更好进行推理?

4

1 回答 1

2

这里真正的技巧是将您的视图模型类与实际模型类分开。视图模型类往往更简单一些,在对它们进行实际操作之前,您需要将它们映射回您的实际模型类。不过,AutoMapper 之类的工具让这一切变得轻而易举。

于 2009-07-16T16:56:19.767 回答