我正在循环我的模型,但是来自模型的值不是在下拉列表中显示为所选项目的值。相反,列表总是只显示第一个条目。
@Html.DropDownListFor(modelItem => item.RecordType, Model.RecordTypes, new { id="recordType_" + item.TransactionID })
item.RecordType的模型值为5(我将其打印出来,所以我知道它是该值)。但是,下拉列表显示“Initial”(值为4)而不是“Firm”(这是我们的模型项值为5的值eof)。源中的列表定义为:
<select data-val="true" data-val-number="The field RecordType must be a number." id="recordType_63" name="item.RecordType">
<option value="4">Initial</option>
<option value="5">Firm</option>
<option value="6">Announced</option>
<option value="7">N/A</option>
</select>
如何将下拉列表设置为模型值?
public IEnumerable<SelectListItem> RecordTypes
{
//get { return new SelectListItem(recordTypes, "RECORD_TYPE_ID", "RECORD_TYPE"); }
get
{
return (from r in recordTypes
select new SelectListItem { Text = r.RECORD_TYPE, Value = r.RECORD_TYPE_ID.ToString() });
}
}
答案 0 :(得分:1)
在汇总RecordTypes
SelectListItem
集合时,请确保为当前所选项目设置Selected = true
- 它不会为您设置。
假设视图模型上的RecordType
变量与数据集的RECORD_TYPE_ID
变量匹配,则可以将变量创建更新为:
from r in recordTypes
select new SelectListItem { Text = r.RECORD_TYPE, Value = r.RECORD_TYPE_ID.ToString(), Selected = r.RECORD_TYPE_ID == this.RecordType }
如果您要在视图的多个下拉列表中重复使用RecordTypes
变量,则必须更改方法并为每个下拉列表创建IEnumerable<SelectListItem>
。 Suchas:
@Html.DropDownListFor(modelItem => item.RecordType, RecordTypes.Select(rt => new SelectListItem { Text = rt.Text, Value = rt.Value, Selected = rt.Value == item.RecordType}))
答案 1 :(得分:1)
您可以在Html.DropDownListFor
中创建SelectList
,例如:
@Html.DropDownListFor(modelItem => item.RecordType, new SelectList(Model.RecordTypes, item.RecordType), new { id="recordType_" + item.TransactionID });
这会将您的IEnumerable<SelectListItem>
与参数一起传递给构造函数,在本例中为item.RecordType
,让它知道要选择哪个项目。
编辑:回应评论
您可以使用SelectList
的重载,这可以让您在案例中指定DataTextField
和DataValueField
,分别为Text
和Value
。
或
重新处理Model.RecordTypes
以返回SelectList
并在那里执行必要的工作,您可以使用方法并传入值进行选择。类似的东西:
public SelectList RecordTypes(object selectedValue)
{
return new SelectList(recordTypes, "RECORD_TYPE", "RECORD_TYPE_ID", selectedValue);
}
希望有所帮助。