modelBinding在使用模型时有效,但在使用viewmodel时无效

时间:2014-12-12 12:42:23

标签: c# asp.net-mvc asp.net-mvc-4

我正在尝试使用viewmodel进行编辑时显示正确的值,但只有当我将完整模型传递给视图时它才有效。

当我这样做并且已经选择了一个联系人时,它会在编辑屏幕中显示该联系人。

模型

public class ClientModel
{
  public int ID { get; set; }
  public int ContactID { get; set; }
  //Other atributes
}

查看EditContact

@model Project.Models.ClientModel
@Html.DropDownListFor(model => model.ContactID , (SelectList)ViewBag.ContactID, "select a contact")

控制器

   public ActionResult EditContact(int? id)
    {
        if (id == null)
        {
            return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
        }

        var Contact = db.Contacts.ToList();
        ViewBagID.Contact = new SelectList(Contact.AsEnumerable(), "ID", "name", "Contact");
        ClientModel model= db.ClientModel.Find(id);

        return View(model);
    }

但是当我这样做并且已经选择了联系人时,下拉列表会显示选择联系人。

模型

public class ClientModel
{
  public int ID { get; set; }
  public int ContactID { get; set; }
  //Other atributes
}

视图模型

public class ClientEditContactModel
{
  public int ID { get; set; }
  public int ContactID { get; set; }
}

查看EditContact

@model Project.Models.ClientEditContactModel
@Html.DropDownListFor(model => model.ContactID, (SelectList)ViewBag.ContactID, "select a contact")

控制器

   public ActionResult EditContact(int? id)
    {
        if (id == null)
        {
            return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
        }

        var Contact = db.Contacts.ToList();
        ViewBag.ContactID = new SelectList(Contact.AsEnumerable(), "ID", "name", "Contact");
        ClientModel client= db.ClientModel.Find(id);
        ClientEditContactModel model = new ClientEditContactModel();

        model.ID = client.ID;
        model.ContactID = client.ContactID 

        return View(model);
    }

如何使用viewmodel修复此问题?

修改 我在我的代码中做了一些拼写错误,所以我修复了它们,但由于它们,我找到了答案,见下文。

2 个答案:

答案 0 :(得分:1)

我在这里进行了一些研究https://stackoverflow.com/a/11949123/4252392之后找到了答案。

问题是ViewBag的名称与模型的属性相同。 所以我改变了Viewbag的名字。

新控制器

 public ActionResult EditContact(int? id)
 {
    if (id == null)
    {
        return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
    }

    var Contact = db.Contacts.ToList();
    ViewBag.ContactIDList = new SelectList(Contact.AsEnumerable(), "ID", 
                                           "name", "Contact");
    ClientModel client= db.ClientModel.Find(id);
    ClientEditContactModel model = new ClientEditContactModel();

    model.ID = client.ID;
    model.ContactID = client.ContactID 

    return View(model);
}

新视图

@model Project.Models.ClientEditContactModel
@Html.DropDownListFor(model => model.ContactID, (SelectList)ViewBag.ContactIDList, 
                                "select a contact")

答案 1 :(得分:0)

如果您在下拉列表中设置ContactID属性中的选定值,则需要在视图中设置下拉列表,如下所示:

@model Project.Models.ClientEditContactModel
@Html.DropDownListFor(model => model.ContactID, (SelectList)ViewBag.Contact,
                      "select a contact")