我有一个名为GoalTypes的小模型,其中包含“跑步,骑自行车,重量......”等内容。
public class GoalType
{
public int Id { get; set; }
public string Type { get; set; }
}
我还有一个名为Goals的模型 公共课目标 { public int Id {get;组; }
[DataType(DataType.Date)]
[DisplayFormat(DataFormatString = "{0:dd/MM/yyyy}", ApplyFormatInEditMode = true)]
public DateTime StartDate { get; set; }
[DataType(DataType.Date)]
[DisplayFormat(DataFormatString = "{0:dd/MM/yyyy}", ApplyFormatInEditMode = true)]
public DateTime? EndDate { get; set; }
public string Type { get; set; }
public double Level { get; set; }
} 类型字段将由GoalTypes中的Type字段填充。 在我的目标控制器中,我做了:
public ActionResult Create()
{
ViewBag.listOfGoals = new SelectList(db.GoalTypes, "Id", "Type");
return View();
}
在我看来
<div class="form-group">
@Html.LabelFor(model => model.Type, htmlAttributes: new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.DropDownList("listOfGoals", "Select a Goal")
@Html.ValidationMessageFor(model => model.Type, "", new { @class = "text-danger" })
</div>
</div>
这会填充下拉列表但如果我提交,则类型字段会留空
答案 0 :(得分:-1)
您必须将@ViewBag传递给@ Html.DropDownList,如下所示:
@Html.DropDownList("listOfGoals", ViewBag.listOfGoals)
或创建一个帮手:
public class MyHelpers{
public static SelectList DropDownListGoalTypes(int? selected) {
var list = db.GoalType.ToList();
return new SelectList(list, "Id", "Type", selected);
}
}
查看:
@Html.DropDownListFor(x => x.Id, MyHelpers.DropDownListGoalTypes(Model.Id))
答案 1 :(得分:-1)
@Html.DropDownList("listOfGoals", "Select a Goal")
生成一个这样的select元素:
<select name="listOfGoals" id="listOfGoals"></select>
但是您在提交时尝试将下拉列表绑定到模型中的Type
属性,
因此,您需要将其更改为:
@Html.DropDownListFor(model => model.Type, (IEnumerable<SelectListItem>)ViewBag.listOfGoals, "Select a Goal")
或
@Html.DropDownListFor("Type", (IEnumerable<SelectListItem>)ViewBag.listOfGoals, "Select a Goal")
现在,select
创建时name
属性为“类型”,DefaultModelBinder
可以将其绑定到POST
操作中的属性。
此外,正如斯蒂芬建议的那样,您需要将Type
更改为int
。因为提交了所选value
的{{1}},而不是文字。
option