在我的一个视图中,我添加了一个下拉列表,并将该下拉列表与我的数据库绑定,如下所示。。
public ActionResult PostMarks()
{
JoinMod std = new JoinMod();
std.Drp_bind = (from nm in db.TbStudent
select new SelectListItem
{
Text = nm.StudentName,
Value = SqlFunctions.StringConvert((double)nm.StudentId).Trim()
}).ToList<SelectListItem>();
return View(std);
}
这是中的下拉列表
<p>StudentName</p>
@Html.DropDownList("StudentName",Model.Drp_bind,"Select")
在Post
上,我正试图像这个一样将数据保存到数据库中
[HttpPost]
public ActionResult PostMarks(Marks marks)
{
db.TbMarks.Add(marks);
db.SaveChanges();
return RedirectToAction("ShowAllMarks");
}
现在,当我在数据库中保存数据后检查我的数据库时,保存在数据库中的Id从dropdownlist为零。请专家帮助我解决这个问题
您应该使用@HTML.DropDownListFor,指定一个lambda,该lambda指示您希望在POST上将列表的选定值绑定到模型中的哪个属性。
给定这样的视图模型:
public class MarksViewModel
{
public Marks Marks { get; set; }
public IEnumerable<SelectListItem> Drp_bind { get; set; }
}
CSHTML中的下拉列表可以这样声明:
@Html.DropDownListFor(m => m.Marks.StudentId, m.Drp_bind, "Select a Student")
第一个参数是描述模型上的属性的表达式,您希望用post-back中下拉列表中的选定值填充该属性。第二个是包含我们需要数据绑定的值的列表。
请注意,CSHTML中需要更多绑定到Marks
属性的其他属性的表单字段。
POST方法现在将MarksViewModel
作为参数,并从中提取Marks
属性以添加到DbContext中进行保存。