我在asp.net mvc代码第一个应用程序中有这两个模型
public class Site
{
public int Id { get; set; }
public string Name { get; set; }
public virtual ICollection<Turbine> Turbines { get; set; }
}
public class Turbine
{
[Key]
public int Id { get; set; }
public string Name { get; set; }
public virtual Site Site { get; set; }
}
在Turbine视图中,我想显示所有站点的下拉列表。发布表单并将下拉列表中的选定值(站点)保存为Turbine表中的外键。
我在控制器中有Get
ViewBag.Sites = new SelectList(db.Sites, "Id", "Name");
return View(db.Turbines.ToList());
这是我在表格帖子中的Turbine视图
@Html.DropDownListFor(m => m.Site.Id, (IEnumerable<SelectListItem>)ViewBag.Sites, "Select", new { @class = "form-control" })
这是我的帖子控制器
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Create([Bind(Include = "Id,Name,Site")] Turbine turbine)
{
if (ModelState.IsValid)
{
db.Turbines.Add(turbine);
db.SaveChanges();
return RedirectToAction("Index");
}
return View(turbine);
}
Id
和Name
已正确保存在Turbine
表格中。但是我在Id
表中得到一个新的行Site
(rest为null),并且在Turbine表中得到与外键相同的Id。
我想在创建新Turbine时列出DropDownList中的所有站点,并将该Id(它是Site表中的主键)保存为Turbine表中的外键。当我创建一个新的Turbine时,我不想在Site表中创建一个新行,我想使用Site表中的现有Id。