MVC5 DropDownListFor 没有选择正确的值
MVC5 DropDownListFor not selecting correct value
我意识到关于这个特定问题的 SO 有很多问题,但是 none 我已经找到的答案与我正在做的完全一样。
查看模型
public FreightDiscountViewModel()
{
Sign = new List<SelectListItem>();
States = new List<SelectListItem>();
FreightDiscounts = new List<FreightDiscountModel>();
PopSign();
PopStates();
}
public List<FreightDiscountModel> FreightDiscounts { get; set; }
public List<SelectListItem> States { get; set; }
public List<SelectListItem> Sign { get; set; }
private void PopSign ()
{
Sign.Add(new SelectListItem { Text = "-", Value = "-" });
Sign.Add(new SelectListItem { Text = "+", Value = "+" });
}
private void PopStates ()
{
States.Add(new SelectListItem { Value = "AL", Text = "Alabama" });
States.Add(new SelectListItem { Value = "AK", Text = "Alaska" });
States.Add(new SelectListItem { Value = "AZ", Text = "Arizona" });
States.Add(new SelectListItem { Value = "AR", Text = "Arkansas" });
States.Add(new SelectListItem { Value = "CA", Text = "California" });
States.Add(new SelectListItem { Value = "CO", Text = "Colorado" });
}
}
查看
@for (var i = 0; i < Model.FreightDiscounts.Count; i++ )
{
<tr>
<td>@Html.DropDownListFor(x => x.FreightDiscounts[i].State, Model.States, new { @class = "form-control" })</td>
</tr>
}
我正在我的视图模型中毫无问题地填充我的 FreightDiscounts
列表,现在为了测试,我只返回 1 个州,阿拉斯加。因此,该列表中填充的 1 条记录具有以下信息
AK,
US,
50,
0,
+
我的问题是,加载视图时,第 1 条记录的州下拉列表设置为阿拉巴马州 (AL),而不是我预期的阿拉斯加。有人看到我明显遗漏了什么吗?\
编辑
JamieD77 的回答解决了我的问题。我将我的视图更改为以下内容。
<td>
@Html.DropDownListFor(x => x.FreightDiscounts[i].State,
new SelectList(Model.DStates, "key", "value", Model.FreightDiscounts[i].State), new { @class = "form-control" })
</td>
然后我将视图模型更改为以下内容
public Dictionary<String, String> DStates { get; set; }
DStates.Add("AL","Alabama" );
DStates.Add("AK","Alaska" );
可能是因为您的 Text 和 Value 字段颠倒了?
编辑:OP 更新了他的代码,它们原来是相反的。
尝试使用 SelectList 并在为
构建下拉列表时设置所选项目
@Html.DropDownListFor(x => x.FreightDiscounts[i].State,
new SelectList(Model.States, "Value", "Text", x.FreightDiscounts[i].State),
new { @class = "form-control" })
我意识到关于这个特定问题的 SO 有很多问题,但是 none 我已经找到的答案与我正在做的完全一样。
查看模型
public FreightDiscountViewModel()
{
Sign = new List<SelectListItem>();
States = new List<SelectListItem>();
FreightDiscounts = new List<FreightDiscountModel>();
PopSign();
PopStates();
}
public List<FreightDiscountModel> FreightDiscounts { get; set; }
public List<SelectListItem> States { get; set; }
public List<SelectListItem> Sign { get; set; }
private void PopSign ()
{
Sign.Add(new SelectListItem { Text = "-", Value = "-" });
Sign.Add(new SelectListItem { Text = "+", Value = "+" });
}
private void PopStates ()
{
States.Add(new SelectListItem { Value = "AL", Text = "Alabama" });
States.Add(new SelectListItem { Value = "AK", Text = "Alaska" });
States.Add(new SelectListItem { Value = "AZ", Text = "Arizona" });
States.Add(new SelectListItem { Value = "AR", Text = "Arkansas" });
States.Add(new SelectListItem { Value = "CA", Text = "California" });
States.Add(new SelectListItem { Value = "CO", Text = "Colorado" });
}
}
查看
@for (var i = 0; i < Model.FreightDiscounts.Count; i++ )
{
<tr>
<td>@Html.DropDownListFor(x => x.FreightDiscounts[i].State, Model.States, new { @class = "form-control" })</td>
</tr>
}
我正在我的视图模型中毫无问题地填充我的 FreightDiscounts
列表,现在为了测试,我只返回 1 个州,阿拉斯加。因此,该列表中填充的 1 条记录具有以下信息
AK,
US,
50,
0,
+
我的问题是,加载视图时,第 1 条记录的州下拉列表设置为阿拉巴马州 (AL),而不是我预期的阿拉斯加。有人看到我明显遗漏了什么吗?\
编辑
JamieD77 的回答解决了我的问题。我将我的视图更改为以下内容。
<td>
@Html.DropDownListFor(x => x.FreightDiscounts[i].State,
new SelectList(Model.DStates, "key", "value", Model.FreightDiscounts[i].State), new { @class = "form-control" })
</td>
然后我将视图模型更改为以下内容
public Dictionary<String, String> DStates { get; set; }
DStates.Add("AL","Alabama" );
DStates.Add("AK","Alaska" );
可能是因为您的 Text 和 Value 字段颠倒了?
编辑:OP 更新了他的代码,它们原来是相反的。
尝试使用 SelectList 并在为
构建下拉列表时设置所选项目@Html.DropDownListFor(x => x.FreightDiscounts[i].State,
new SelectList(Model.States, "Value", "Text", x.FreightDiscounts[i].State),
new { @class = "form-control" })