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

如果我有一个类似这样的类:

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 …我该怎么做呢?

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

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

点赞