自定义html助手下拉列表

时间:2015-04-28 12:16:33

标签: c# html .net asp.net-mvc razor

我有这个片段:

@Html.DropDownList("consultations", Model.ConsultationsTruncated, new { @class = "form-control", @id = "consultations" })

显示的文字被截断:

例如

  

string s ="大家好" ==>文字=" Hel ..."和价值=""你好   大家"

我希望用类似的扩展方法替换此实现:

 public static class TruncateDropDownList
{

    public static DropDownList TruncateDropDown(this HtmlHelper helper, ListItem[] values)
    {
        DropDownList drop = new DropDownList();
        drop.Items.AddRange(values);

        List<SelectListItem> Textes = new   List<SelectListItem>() ;
        foreach (ListItem item in values)
        {
            SelectListItem selItem = new SelectListItem();
            if (item.Text.Length <= 20) selItem.Text = item.Text;
            else selItem.Text = item.Text.Substring(0, 20) + "...";
            Textes.Add(selItem);
        }

        return drop;

    }
}

缺少此方法实现:

  1. dropDownList名称属性
  2. Css属性
  3. 按照第一个
  4. 制作选定的文字和数值

    如何完成此方法以完成此任务?

2 个答案:

答案 0 :(得分:3)

您的扩展方法中没有为html属性添加参数:

public static MvcHtmlString TruncateDropDown(this HtmlHelper helper, string name, ListItem[] values, Object htmlAttributes)
{

   List<SelectListItem> Textes = new List<SelectListItem>();
   foreach (ListItem item in values)
   {
       SelectListItem selItem = new SelectListItem();
       if (item.Text.Length <= 20) 
          selItem.Text = item.Text;
       else 
          selItem.Text = item.Text.Substring(0, 20) + "...";
                Textes.Add(selItem);
   }

   return System.Web.Mvc.Html.SelectExtensions.DropDownList(helper,
                                                            name, 
                                                            Textes,
                                                            htmlAttributes);

}

答案 1 :(得分:1)

您可以通过利用DropDownList的现有HtmlHelper来实现此目的。它看起来像这样:

public static class TruncateDropDownList
{
    public static MvcHtmlString TruncateDropDown(this HtmlHelper helper, string id, ListItem[] values, object htmlAttributes)
    {
        List<SelectListItem> Textes = new   List<SelectListItem>() ;
        foreach (ListItem item in values)
        {
            SelectListItem selItem = new SelectListItem();
            if (item.Text.Length <= 20) selItem.Text = item.Text;
            else selItem.Text = item.Text.Substring(0, 20) + "...";
            Textes.Add(selItem);
        }

        return helper.DropDownList(id, values, htmlAttributes);
    }
}