我在编辑模式下有三个下拉列表,我可以在DDLFor中填充正确的文本但是它的ID在提交时会显示为0,但是如果我选择不同的团队,它会提供正确的ID。以下是我的代码
视图模型
public List<SelectListItem> TeamOneList { get; set; }
public string SelectedTeamOne { get; set; }
.... //remaining properties for DDL's..........
控制器
List<SelectListItem> TeamOneList = new List<SelectListItem>();
foreach (var item in db.Teams)
{
TeamOneList.Add(new SelectListItem { Text = item.TeamName, Value = item.TeamId.ToString() });
}
string SelectedTeamOne = db.Teams.Where(o => o.TeamId == fixture.TeamOneId).Select(s => s.TeamName).Single();
查看
@Html.DropDownListFor(model => model.TeamOneId, Model.TeamOneList, Model.SelectedTeamOne, new { @class = "form-control" })
答案 0 :(得分:1)
根据value
的{{1}}属性生成选项TeamId
属性,但根据Team
name属性设置SelectedTeamOne
值,所以TeamName
的值与任何选项都不匹配,因此选择了第一个选项(SelectedTeamOne
标签选项)(因为必须有)。
但是您使用与null
相同的文字生成null
标签选项,因此看起来您正在选择它,实际上您只选择SelectedTeamOne
值的选项(有实际上是您的下拉列表中具有相同名称的第二个选项。)
您需要将视图中的代码更改为
null
然后将控制器代码更改为
@Html.DropDownListFor(model => model.SelectedTeamOne, Model.TeamOneList, "-Please select-", new { @class = "form-control" })
请注意,SelectedTeamOne = db.Teams.Where(o => o.TeamId == fixture.TeamOneId).Select(s => s.TeamId).Single();
的类型为TeamId
,因此您的int
属性也应为SelectedTeamOne
,而不是int
string
此外,您只需使用
即可public int SelectedTeamOne { get; set; }
或者,甚至更简单
var model = new yourModelName
{
TeamOneList = db.Teams.Select(x => new SelectListItem>
{
Value = x.TeamId.ToString(),
Text = x.TeamName
}),
SelectedTeamOne = fixture.TeamOneId // no need to make a database call
};
return View(model);