如果我需要从自定义模型绑定器中检索对象,那么绑定器是否应该与服务层,存储库层或...相互作用?

时间:2009-07-13 14:51:52

标签: asp.net-mvc repository reference modelbinders model-binding

如果我有类似这样的课程:

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

当我创建自定义模型绑定器时,我的表单中的Post不会发送到Pet中,它会发送如下数据:firstName:“myFirstName”lastName:“myLastName”myPet:“myPetsName”

由于Pet的名称是传入的,而不是实际的Pet对象,因此需要从模型绑定器中检索Pet对象。

我的问题是,模型绑定器是否应该与服务层,存储库层交互,还是应该检索Pet?服务层的问题是我在初始化服务时似乎没有访问ModelState:((this.ModelState)给我一个错误)

_petService = new PetService(new ModelStateWrapper(this.ModelState));

如果我需要模型绑定器来创建一个Person对象,那么需要以某种方式分配Pet ...我该怎么做呢?

1 个答案:

答案 0 :(得分:2)

我所做的是使用视图/演示模型而不是绑定到业务对象。请记住,您的用户可能会输入无效值,并且在提示用户更正错误时,您需要向用户重新显示这些无效值。但是,您的“真实”业务对象可能不会接受无效值。因此视图模型必须允许任何用户输入,甚至输入业务对象也不会接受。

这使得绑定变得容易。只有在使用(有效)用户输入更新业务对象时,才需要命中存储库进行绑定。