Я сделал расширение DropDownList
в ASP.NET MVC HtmlHelper
, чтобы оно отображало optgroup
. Он работает «отлично», когда вторая коллекция - IList
, но я быстро обнаружил, что если это не так, или в моем случае, если это EntityCollection
, то происходит сбой, потому что SelectList
не может перечислить его. *
Итак, я здесь прошу помощи у любого, кто знает, как я могу обойти эту проблему. Я думал о том, чтобы передать Type
того, что представляет собой вторая коллекция, а затем выполнить внутреннее приведение, но это просто не подходит ...
В любом случае, я надеюсь, что кто-то может мне помочь, вот текущий код:
internal IList<GroupListItem> GetListItems() {
return (from object Item in Items
select new GroupListItem {
Children = new SelectList((Eval(Item, this.ChildrenField) as IEnumerable), this.ChildDataValueField, this.ChildDataTextField, this.ChildSelectedValue),
Label = (Eval(Item, this.LabelField) as string)
}).ToList();
}
private static object Eval(
object Container,
string Expression) {
object Value = Container;
if (!String.IsNullOrEmpty(Expression)) {
Value = DataBinder.Eval(Container, Expression);
};
if (Value is IList) {
return Value;
};
return Convert.ToString(Value, CultureInfo.CurrentCulture);
}