2011-12-18 62 views
-1

我創建了一個名爲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屬性。我將如何能夠從傳遞給此方法的匿名類型中獲取這些值?

+0

您需要反思。 – SLaks 2011-12-18 17:26:24

回答