如何从SelectList中获取所选文本

时间:2013-02-05 18:10:56

标签: asp.net-mvc asp.net-mvc-3

我正在为具有以下签名的下拉列表创建自定义帮助器方法:

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);

在我的帮助方法中,我需要找出所选文本的内容,而不仅仅是值。我怎么能得到它?

2 个答案:

答案 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; 
  }