我正在为具有以下签名的下拉列表创建自定义帮助器方法:
public static MvcHtmlString MyCustomDropDownListFor<TModel, TProperty>(this HtmlHelper<TModel> html, Expression<Func<TModel, TProperty>> expression, IEnumerable<SelectListItem> selectList, string optionLabel, object htmlAttributes)
在该方法中,我可以执行以下操作来获取所选值:
var Value = ((SelectList)selectList).SelectedValue);
在我的帮助方法中,我需要找出所选文本的内容,而不仅仅是值。我怎么能得到它?
答案 0 :(得分:3)
如果您已经选择了值,则可以遍历IEnumerable
尝试找到所选的SelectListItem
:
SelectListItem[] items = selectList.ToArray();
SelectListItem selectedItem = items.FirstOrDefault(i => i.Value == valueAsString)
?? items[0];
string selectedText = selectedItem.Text;
从我的观点来看,转换为SelectList
并不是找到所选值的最佳选择,当真实类型的InvalidCastException
变量不是{{1}时,此投射可能会抛出selectList
}。
在大多数情况下,您的模型包含应在下拉列表中选择的值。您可以使用SelectList
类获取此值,如下所示:
ModelMetadata
答案 1 :(得分:2)
public static string getText(SelectList selectList)
{
string text = selectList.Where(x => x.Selected).FirstOrDefault().Text;
return text;
}