Asp.net mvc MVC视图模型获取子对象

Asp.net mvc MVC视图模型获取子对象,asp.net-mvc,model,view,Asp.net Mvc,Model,View,我有一个主联系人和联系人视图模型。如何获取联系人模型并将其更新到数据库 [HttpPost] public ActionResult EditContact(ContactFormViewModel contactView) { } 在我需要ViewModel之前,我就是这样做的 [HttpPost] public ActionResult EditContact(int id, FormCollection collection) {

我有一个主联系人和联系人视图模型。如何获取联系人模型并将其更新到数据库

  [HttpPost]  
    public ActionResult EditContact(ContactFormViewModel contactView) {  

    }
在我需要ViewModel之前,我就是这样做的

[HttpPost]
    public ActionResult EditContact(int id, FormCollection collection) {  
        Contact contact = repository.GetContactById(id);  
                      if (TryUpdateModel(contact, "Contact")) {  
                           repository.Save();  
                           return RedirectToAction("Index");   
 return View(new ContactFormView Model(contact));  
            }   
            }       

当您有一个视图模型时会更容易一些(您可以忘记
FormCollection
TryUpdateModel
):

[HttpPost]
公共操作结果EditContact(ContactViewModel联系人)
{  
if(ModelState.IsValid)
{
//模型有效=>我们可以将其保存到数据库中
Contact Contact=mapper.Map(Contact);
保存(联系);
返回操作(“索引”);
}
//重新显示表单以修复验证错误
返回视图(联系人);
}

其中,
mapper
在视图模型和模型之间进行转换。是执行此任务的最佳选择。

我尝试了如下方法:Contact Contact=Mapper.Map(contactView.Contact);Save();这会更新联系人对象的值,但当我调用save时,它不会保存到数据库中。我正在将LINQ与EF一起使用。存储库中的
save
函数应该以实例进行保存。很抱歉,因为我对EF和LINQ都很陌生,所以我只看到这3种方法。我如何更新此联系人,因为我将在数据库中拥有现有联系人。我尝试了所有可能的选项。但实体与对象断开连接,如前所述。我不知道什么是正确的解决方案,以获得这项工作。不确定,但经过多次尝试与Automapper尝试了这一点,并工作良好!Contact Contact=repository.GetContactById(contactView.Contact.Id);if(TryUpdateModel(contact,“contact”){repository.Save();}
[HttpPost]
public ActionResult EditContact(ContactViewModel contact) 
{  
    if (ModelState.IsValid)
    {
        // the model is valid => we can save it to the database
        Contact contact = mapper.Map<ContactViewModel, Contact>(contact);
        repository.Save(contact);  
        return RedirectToAction("Index");   
    }
    // redisplay the form to fix validation errors
    return View(contact);
}