MVC 方法从 ListBoxFor 方法输出无序列表
Posted
技术标签:
【中文标题】MVC 方法从 ListBoxFor 方法输出无序列表【英文标题】:MVC Method to output unordered list from the ListBoxFor method 【发布时间】:2012-01-24 16:08:52 【问题描述】:在 MVC3 中,我想通过 html.ListBoxFor 方法更改 HTML 输出,这样我就想简单地输出一个无序列表(UL , LI) 的选定项目而不是 SELECT 元素。问题是我想保持与 ListBoxFor 方法完全相同的方法签名,接受一个 MultiSelectList 对象和一个作为所选值的 List。然后我希望无序列表仅将所选项目值(不是键)输出为 UL/LI html。这是我想要的方法签名。这如何实现?
public static MvcHtmlString ListBoxForAsUnorderedList <TModel, TProperty>
(this HtmlHelper<TModel> htmlHelper,
Expression<Func<TModel, TProperty>> expression,
IEnumerable<SelectListItem> selectList)
【问题讨论】:
【参考方案1】:我想通了,下面的代码可以帮助其他人。基本上,我将参数传递给通用 ListBox 方法,取回生成的原始 HTML,然后使用 Linq to XML 仅将“选定”值抓取到字符串数组中。然后我遍历字符串数组并使用 TagBuilder("ul") 生成列表。我愿意接受任何有关使用此方法的 cmets 或批评。
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());
【讨论】:
你的调用字符串是什么样的?以上是关于MVC 方法从 ListBoxFor 方法输出无序列表的主要内容,如果未能解决你的问题,请参考以下文章
ASP.NET MVC 4 - ListBoxFor,在 ActionLink 中发送 selectedValue
将 ListBoxFor 绑定到 MVC 3 中的模型并使用另一个模型自动选择多个项目