具有不同源和目标类型的UpdateModel

时间:2012-10-04 17:11:03

标签: asp.net-mvc

在我的操作中,我使用具有以下属性的InsertPerson模型:

pulbic class InsertPerson
{
     [Required]
     public string Name{get;set;}
}

我有一个传递到我的存储库的DTO模型:

public class PersonDto
{
     public int Id{get;set;}
     public string Name{get;set;}
     public string LastName{get;set;}
}

我的行动:

[HttpPost]
public ActionResult Create(InsertPerson insertPerson)
{
     if(ModelState.IsValid){
           var personDto = new PersonDto();

           UpdateModel(personDto)
           //UpdateModel(personDto, "insertPerson") I've tried this too

     }

}

为什么它不起作用(在UpdateModel之后所有属性仍为null)?

有没有办法使用personDto更新我的UpdateModel

我知道AutoMapper,但我认为在控制器中使用它很无聊。


我的观点:

@model Help_Desk.ViewModel.InsertPersonViewModel

@using (Html.BeginForm())
{
    @Html.TextBoxFor(m => m.InsertPerson.Name)

    <button type="submit">Save</button>
}

和我的viewmodel:

public class InsertPersonViewModel
{
    public InsertPerson InsertPerson{ get; set; }
}

1 个答案:

答案 0 :(得分:1)

好的,现在我们看到了问题。缺少的信息是您使用的是视图模型,而视图模型创建了一个必须在UpdateModel中考虑的各种“容器”。

正在发生的事情是UpdateModel试图在personDto对象中逐字更新“InsertPerson.Name”。由于这不存在,它不起作用。

您可以通过指定UpdateModel(personDto, "InsertPerson")

来解决此问题