我創建了一個名爲DisplayListBoxFor的HtmlHelper方法,該方法將需要在瀏覽器中以MultiSelectList中的無序列表(UL/LI)的形式顯示所選項目的文本表示形式。我有特定的理由保持標準的ListBoxFor和我自定義的DisplayListBox之間的簽名完全一樣,這意味着我的方法需要接受一個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.Se在創建時獲得價值財產。我試圖在我的foreach循環中找到一種方法將選定值與值名稱進行匹配,但由於方法中的所有內容都是匿名類型,因此我無法將其轉換爲任何非具體值,甚至無法使用索引器找到id和name屬性。我將如何能夠從傳遞給此方法的匿名類型中獲取這些值?
您需要反思。 – SLaks 2011-12-18 17:26:24