C# 如何返回EntityCollection类型的对象以与ASP.NET MVC中的SelectList一起使用?
我对ASP.NET MVCC# 如何返回EntityCollection类型的对象以与ASP.NET MVC中的SelectList一起使用?,c#,asp.net-mvc,entity-framework,html-helper,enumeration,C#,Asp.net Mvc,Entity Framework,Html Helper,Enumeration,我对ASP.NET MVCHtmlHelper中的DropDownList进行了扩展,使其能够呈现optgroup。当第二个集合是IList时,它工作“正常”,但我很快发现,如果它不是,或者在我的情况下,如果它是EntityCollection,它会崩溃,因为SelectList无法枚举它 所以,我在这里向任何知道如何绕过这个问题的人寻求帮助。我想传入第二个集合的类型,然后在内部执行强制转换,但这感觉不对 无论如何,我希望有人能帮助我,以下是当前的代码: internal IList<Gr
HtmlHelper
中的DropDownList
进行了扩展,使其能够呈现optgroup
。当第二个集合是IList
时,它工作“正常”,但我很快发现,如果它不是,或者在我的情况下,如果它是EntityCollection
,它会崩溃,因为SelectList
无法枚举它
所以,我在这里向任何知道如何绕过这个问题的人寻求帮助。我想传入第二个集合的类型,然后在内部执行强制转换,但这感觉不对
无论如何,我希望有人能帮助我,以下是当前的代码:
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);
}
内部IList GetListItems(){
返回(从项目中的对象项目)
选择新建GroupListItem{
Children=新的SelectList((Eval(Item,this.ChildrenField)为IEnumerable)、this.ChildDataValueField、this.ChildDataTextField、this.ChildSelectedValue),
Label=(Eval(Item,this.LabelField)作为字符串)
}).ToList();
}
私有静态对象评估(
对象容器,
字符串表达式){
对象值=容器;
如果(!String.IsNullOrEmpty(表达式)){
Value=DataBinder.Eval(容器、表达式);
};
if(值为IList){
返回值;
};
返回Convert.ToString(值,CultureInfo.CurrentCulture);
}
您考虑过使用IEnumerable而不是IList吗?我考虑过,但问题是在这种情况下,传入的任何对象都实现了IEnumerable,因此它们将始终命中该条件并返回。非集合对象(如本例中的标签)永远不会正确返回,并且会在代码的其他地方导致问题。