【问题标题】:Index into or find property values of anonymous type索引或查找匿名类型的属性值
【发布时间】:2011-12-18 03:16:32
【问题描述】:

我创建了一个名为 DisplayListBoxFor 的 HtmlHelper 方法,它需要在浏览器中将 MultiSelectList 中所选项目的文本表示形式显示为无序列表 (UL/LI)。我有特定的理由保持标准 ListBoxFor 和我的自定义 DisplayListBoxFor 之间的签名完全相同,这意味着我的方法需要接受 lambda 表达式。我的助手类中有以下代码,它是根据 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());
}

然后我可以像这样调用我的自定义方法:

@Html.DisplayListBoxFor(x => Model.MySelectedValues, Model.MyAvailableValues)

我使用的类型如下:

Model.MySelectedValues = List<Object> 
Model.MyAvailableValues = MultiSelectList

这工作得很好,除了输出只列出 ID 值而不是选定值的名称,因为这是在创建时存储在 MultiSelectList.SelectedValues 属性中的全部内容。我试图在我的 foreach 循环中找到一种方法来将所选值与值名称匹配,但由于该方法中的所有内容都是匿名类型,因此我无法将其转换为任何非具体值,甚至无法使用索引器查找 id 和 name 属性。我如何能够从传递给此方法的匿名类型中获取这些值?

【问题讨论】:

    标签: model-view-controller html-helper anonymous-types


    【解决方案1】:

    我想出了一个解决方案,但我在另一篇文章中“简化”了这个问题。见MVC Method to output unordered list from the ListBoxFor method

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-05
      • 2015-05-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多