DropDownListFor()未设置为模型值

时间:2014-05-08 14:36:01

标签: c# asp.net

我正在循环我的模型,但是来自模型的值不是在下拉列表中显示为所选项目的值。相反,列表总是只显示第一个条目。

@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() });
            }
        }

2 个答案:

答案 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的重载,这可以让您在案例中指定DataTextFieldDataValueField,分别为TextValue

重新处理Model.RecordTypes以返回SelectList并在那里执行必要的工作,您可以使用方法并传入值进行选择。类似的东西:

public SelectList RecordTypes(object selectedValue)
{
    return new SelectList(recordTypes, "RECORD_TYPE", "RECORD_TYPE_ID", selectedValue);
}

希望有所帮助。