首先,很抱歉再次提出这个话题,这个话题之前在这个网站上已经讨论过很多次了——尽管我尽力了,但我就是无法让我的代码正常工作。
我有以下模型类:
public class ProjectsTable {
public int ID {get; set;}
public String ProjectName {get; set;}
...
public virtual Manager Manager_Id {get; set;} // Stores foreign key of Manager
}
public class Manager {
public int ID {get; set;}
public String ManagerName {get; set;}
...
public virtual ICollection<ProjectsTable> Projects {get; set;}
}
ProjectsTable 控制器类包含以下方法来兼作显示和编辑页面:
private SynthContext db = new SynthContext();
...
// GET: /ProjectsTable/Parameters/5
public ActionResult Parameters(int id) {
ProjectsTable projectstable = db.ProjectsTable.Find(id);
ViewBag.Manager_Id = new SelectList(db.Manager, "ID", "ManagerName");
return View(projectstable);
}
// POST: /ProjectsTable/Parameters/5
public ActionResult Parameters(ProjectsTable projectstable) {
if(ModelState.IsValid) {
db.Entry(projectstable).State = EntityState.Modified;
db.SaveChanges();
return RedirectToAction("Parameters");
}
ViewBag.Manager_Id = new SelectList(db.Manager, "ID", "ManagerName");
return View(projectstable);
}
最后,Parameters.cshtml 包含以下代码来显示下拉菜单
@model Synth.Models.ProjectsTable
...
<fieldset>
...
<div class="editor-lable">
@Html.LabelFor(model => model.Manager_ID)
</div>
<div class="editor-field">
@HTML.DropDownList("Manager_ID", String.Empty)
</div>
<input type="submit" value="Update">
</fieldset>
/ProjectsTable/Parameters/x
当我测试代码时,我可以毫无问题地导航到;下拉列表正确生成,其中包含经理名称列表。但是,当我单击“更新”按钮时,Manager_ID 以红色突出显示,表示更改尚未注册。/ProjectsTable/list
我可以通过导航到我发现没有任何更改生效的位置来确认更改尚未注册。
我试过添加@Html.ValidationMessageFor(Model.Manager_ID)
,结果总是“值'x'无效”,其中x是一个有效的ID值(我已经对照数据库检查过)。
我查看了生成的 HTML 源代码,也没有发现任何错误。
我怀疑我需要替换@HTML.DropDownList
为@HTML.DropDownListFor
,但我无法弄清楚它需要哪些参数才能使其正常工作。
编辑 - 我现在已经设法开始DropDownListFor
工作,但问题仍然存在。帮助我解决此问题的一个相关问题可能是如何查看发送回服务器的发布数据。
任何帮助将非常感激。
先谢谢大家了。。。
乔波