如果您已经选择了值,则可以遍历IEnumerable尝试查找 selected SelectListItem:
SelectListItem[] items = selectList.ToArray();
SelectListItem selectedItem = items.FirstOrDefault(i => i.Value == valueAsString)
?? items[0];
string selectedText = selectedItem.Text;
在我看来,转换SelectList为不是找到选定值的最佳选择,InvalidCastException当变量的真实类型selectList不是SelectList.
在大多数情况下,您的模型包含一个应在下拉列表中选择的值。您可以使用以下类获取此值ModelMetadata:
//Get value from model or from ModelState
object modelValue = ModelMetadata
.FromLambdaExpression(expression, html.ViewData).Model;
SelectListItem[] items = selectList.ToArray();
string selectedValue = modelValue == null ? null : modelValue.ToString();
SelectListItem selectedItem = items.FirstOrDefault(i => i.Value == selectedValue)
?? items.FirstOrDefault();
string selectedText = selectedItem == null ? null : selectedItem.Text;
//Rest code goes here