Asp.net mvc 4 编辑/修改数据时,Viewbag无效false

Asp.net mvc 4 编辑/修改数据时,Viewbag无效false,asp.net-mvc-4,Asp.net Mvc 4,我试图在我的UserController中获取我的公司文件ID 在第一步中,我得到了正确的ID,但在[HttpPost]中,ID值被更改为与用户ID相同的值 这是我的控制器 public ActionResult Edit (int id) { User user = _db.Users.Find(id); if ( user == null) { return HttpNotFound(); } ViewBag.CompanyProfile = new SelectList(_db.Compa

我试图在我的UserController中获取我的公司文件ID 在第一步中,我得到了正确的ID,但在[HttpPost]中,ID值被更改为与用户ID相同的值 这是我的控制器

public ActionResult Edit (int id)
{
User user = _db.Users.Find(id);
if ( user == null)
{
return HttpNotFound();
}
ViewBag.CompanyProfile = new SelectList(_db.CompanyProfiles,"ID","NamaProfil", user.CompanyProfile.ID);
return View(user);
}


[HttpPost]
public ActionResult Edit(User user)
{
if (ModelState.IsValid)
{
_db.Entry(user).State = EntityState.Modified;
_db.SaveChanges();
return RedirectToAction ("Index");
}
return View(user);
}
这就是模型

public int ID {get;set;}
public virtual CompanyProfile CompanyProfile {get;set;}
这是编辑视图中的下拉列表

<div class= "controls">
@Html.DropDownList("CompanyProfile", null, "--Choose Company--", new {@class="span6 m-wrap"})
</div>

@DropDownList(“CompanyProfile”,null,“--Choose Company--”,new{@class=“span6 m-wrap”})
每个答案都可能有帮助,谢谢

忘了告诉我,这是错误信息
没有具有键“CompanyProfile”的“IEnumerable”类型的ViewData项

这里有很多问题。要传递给视图的模型具有一个名为CompanyProfile的属性,该属性的引用类型为CompanyProfile。这种类型不能绑定到任何类型的IEnumerable——这两种模型根本不匹配。模型属性的类型必须为int,才能与传入的选定值-user.CompanyProfile.ID匹配

第二个问题是,永远不要将模型属性命名为与任何ViewBag值相同的名称。同样,您有一个名为CompanyProfile的属性,还有一个ViewBag.CompanyProfile。这两个将在模型绑定期间相互覆盖

我建议您执行以下操作:在控制器中,将选择列表绑定到ViewBag,而不定义所选值:

ViewBag.CompanyProfileList = new SelectList(_db.CompanyProfiles,"ID","NamaProfil");
然后,您的模型应具有选定的公司配置文件id属性:

public int CompanyProfileId { get; set; }
然后将其绑定到您的视图中,如下所示:

@Html.DropDownListFor(m => m.CompanyProfileId, (SelectList)ViewBag.CompanyProfileList, "--Choose Company--", new { @class = "span6 m-wrap" })

但是如果我没有定义所选的值,我的下拉列表将为空,并且我无法保存数据如果CompanyProfileId属性有一个值(比如5),并且值5是从_db.CompanyProfiles获得的选择列表中的值之一,那么生成的下拉列表将自动默认为所选的值。