我希望在从我的视图执行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 firstName
,string lastName
。但javascript无法提供Pet ...
所以我只有两个选项(我知道):
允许myPet在数据库中为空
创建一个“flatter”类,表示不需要宠物对象的Person ...
即:
Pet myPet
第一个选项的问题是,修改数据库似乎很奇怪...肯定是错误的,因为它允许它不应该是......
第二个选项的问题是我有很多类,为了避免这种情况,为每个类编写重复的类似乎很广泛......如果我有30个类,那将是30个重复的类我必须创建才能允许模型绑定。
任何人都可以考虑任何更好的选择,或者为什么一个选项比另一个更好?
答案 0 :(得分:2)
这里真正的技巧是将视图模型类与实际模型类分开。视图模型类往往更简单一些,您需要在使用它们之前将它们映射回实际的模型类。像AutoMapper这样的工具可以让它变得非常简单。