环境:带有 MVC 和 Razor 的实体框架 (v6.0)。后端是 SQL Server。
HTML 助手 DropDownListFor() 非常适合数据库中的字符串列。但是,当我使用带有数字下拉列表的小数列时,框架在呈现表单时不会选择从数据库加载的值。
我认为这与 DropDownListFor() 包含 Text 和 Value 的字符串这一事实有关,并且无法匹配数据库中的十进制值,因此未确定 SelectedItem。
我尝试在 HTML 帮助程序中进行强制转换,但在编译或运行时失败。我能找到的所有示例都假设您要选择一个字符串,而不是一个数字。
感激地收到任何帮助。谢谢。
查看代码:问题字段为CollarSize。下拉列表是 CollarSizeSelect。
<div class="form-group">
@Html.LabelFor(model => model.CollarSize, htmlAttributes: new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.DropDownListFor(model => model.CollarSize, Model.CollarSizeSelect, htmlAttributes: new { @class = "form-control" })
@Html.ValidationMessageFor(model => model.CollarSize, "", new { @class = "text-danger" })
</div>
</div>
类定义包含这样定义的列:
public Nullable<decimal> CollarSize { get; set; }
CollarSize 下拉列表构建如下:
public IEnumerable<SelectListItem> ChestSizeSelect
{
get
{
return GetSelectNumberRange(32, 60, (decimal)1.0);
}
}
private static List<SelectListItem> GetSelectNumberRange(int start, int end, decimal increment)
{
List<SelectListItem> numlist = new List<SelectListItem>();
for (decimal i = start; i <= end; i = i + increment)
{
numlist.Add(new SelectListItem() {Text = i.ToString(), Value = i.ToString()});
}
return numlist;
}