gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 19:33:48 26 4
gpt4 key购买 nike

在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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com