Я создал метод HtmlHelper с именем DisplayListBoxFor, который должен отображать текстовое представление выбранных элементов в MultiSelectList в виде неупорядоченного списка (UL / LI) в браузере.У меня есть конкретные причины для того, чтобы подпись между стандартным ListBoxFor и моим настраиваемым DisplayListBoxFor была точно такой же, что означает, что мой метод должен принимать лямбда-выражение.У меня есть следующий код в моем классе помощников, который смоделирован из метода Html.ListBoxFor:
public static MvcHtmlString DisplayListBoxFor<TModel, TProperty>(this HtmlHelper<TModel> htmlHelper, Expression<Func<TModel, TProperty>> expression, IEnumerable<SelectListItem> selectList)
{
TagBuilder tag = new TagBuilder("ul");
foreach (var value in ((MultiSelectList)selectList).SelectedValues)
{
TagBuilder itemTag = new TagBuilder("li");
itemTag.SetInnerText(value.ToString());
tag.InnerHtml += itemTag.ToString();
}
return new MvcHtmlString(tag.ToString());
}
Затем я могу вызвать свой пользовательский метод следующим образом:Я использовал следующее:
Model.MySelectedValues = List<Object>
Model.MyAvailableValues = MultiSelectList
Это работает просто отлично, за исключением того, что в выводе указывается только значение идентификатора, а не имя выбранного значения, поскольку это все, что хранится в MultiSelectList.Свойство SelectedValues при создании.Я пытаюсь найти способ в моем цикле foreach сопоставить выбранное значение с именем значения, но, поскольку все в методе является анонимным типом, я не могу привести его к каким-либо не конкретным значениям или даже использовать индексаторнайти свойства id и name.Как бы я мог получить эти значения от анонимных типов, передаваемых этому методу?