asp.net-mvc - MVC方法从ListBoxFor方法输出无序列表

标签 asp.net-mvc asp.net-mvc-3 html-helper html.listboxfor

在MVC3中,我想更改Html.ListBoxFor方法的HTML输出,以便代替所有具有所有可用值(并且选中的值突出显示)的HTML列表框,我只想输出无序列表(UL,LI)而不是SELECT元素。问题是我想让与ListBoxFor方法完全相同,方法签名也接受MultiSelectList对象和一个List,这些List是选定的值。然后,我希望无序列表仅将选定的项目值(而不是键)输出为UL / LI html。这是我想要的方法签名。如何做到这一点?

public static MvcHtmlString ListBoxForAsUnorderedList <TModel, TProperty>
    (this HtmlHelper<TModel> htmlHelper, 
          Expression<Func<TModel, TProperty>> expression, 
          IEnumerable<SelectListItem> selectList)

最佳答案

我想出了这个,下面的代码可以帮助其他人。基本上,我将参数传递给通用的ListBox方法,取回生成的原始HTML,然后使用Linq to XML将仅“选定”的值捕获到字符串数组中。然后,我遍历字符串数组,并使用TagBuilder(“ul”)生成列表。我对使用此方法的任何评论或批评持开放态度。

public static MvcHtmlString ListBoxForAsUnorderedList<TModel, TProperty>(this HtmlHelper<TModel> htmlHelper, Expression<Func<TModel, TProperty>> expression, IEnumerable<SelectListItem> selectList)
{
  var mvcHtmlString = System.Web.Mvc.Html.SelectExtensions.ListBox(htmlHelper, ExpressionHelper.GetExpressionText(expression), selectList, null);
  var selectedValues = XDocument.Parse(mvcHtmlString.ToHtmlString()).Descendants("option").Where(e => (string)e.Attribute("selected") == "selected").Select(e => e.Value).ToArray();
  var tag = new TagBuilder("ul");
  foreach (var value in selectedValues)
  {
    var itemTag = new TagBuilder("li");
    itemTag.SetInnerText(value);
    tag.InnerHtml += itemTag.ToString();
  }
  return new MvcHtmlString(tag.ToString());
}

关于asp.net-mvc - MVC方法从ListBoxFor方法输出无序列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8579789/

相关文章:

c# - MVC 中 ASPXAUTH Cookie 的安全标志

html - MvcHtmlString.Create() 方法不返回 Html 编码的字符串

asp.net-mvc - Entity Framework 4.1 - 现有数据库的代码优先,如何定义类,使用属性或 EntityTypeConfiguration?有什么不同?

c# - MVC3 Controller 未接收任何参数值

javascript - 从 Javascript 函数调用 Html Helper 方法

asp.net - 将 ASP.Net MVC 与经典 ADO.Net 结合使用

asp.net - ViewModel 的列表在操作中为 null

asp.net-mvc-3 - ASP.NET MVC 3 JSONP : Does this work with JsonValueProviderFactory?

c# - 无论如何要在 Razor Generator Template 中创建一个递归助手

JavaScript - 从目录中选择一个随机页面