【发布时间】:2009-07-16 14:42:53
【问题描述】:
我想在我的视图中进行 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不能提供宠物...
所以我只有两个选择(据我所知):
允许 myPet 在 DB 中为空
创建一个“扁平”类来表示不需要宠物对象的 Person...
即:
public class SimplePerson {
public string firstName { get; set; }
public string lastName { get; set; }
public string myPetName { get; set; }
}
第一个选项的问题是,必须修改数据库似乎很奇怪......肯定有问题,因为它允许做不应该的事情......
第二个选项的问题是我有很多类,并且为每个类编写重复的类似乎很广泛,只是为了避免这种情况......如果我有 30 个类,那将是 30 个重复的类,我必须创建才能允许模型绑定。
谁能想到任何更好的选择,或说明为什么一种选择会比另一种更好?
【问题讨论】:
标签: sql-server asp.net-mvc ajax model-binding complex-data-types