选定文本和值的下拉列表ASP.NET MVC

时间:2016-09-29 07:19:39

标签: asp.net-mvc

我在编辑模式下有三个下拉列表,我可以在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" })

1 个答案:

答案 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);