Asp.net mvc,修改SelectList

问题描述:

我想为SelectList编写简单的扩展方法。 API让我困惑。Asp.net mvc,修改SelectList

public static SelectList Without(this SelectList selectList,int val){ 
    //return new SelectList(selectList.Items.Where(x=>x.Value!=val)); <-----??? 
} 

应该有相同的项目将返回新的选择列表中的w/o其中一个值相匹配的说法val

+1

您可以扩展您的方法不工作的哪一点? – 2011-03-14 09:29:34

+0

@Mark'selectList.Items.Where(x => x.Value!= val)'因为Items.GetType == typeof(IEnumerable)' – 2011-03-14 09:32:29

你只需要将一个ToArray()应用到你的IEnumerable集合?

return new SelectList(selectList.Items.Where(x=>x.Value!=val).ToArray()); 
+0

Nope。评论下我的问题。问题是Items是从对象收集的。 'x'没有'Value'。 – 2011-03-14 09:36:07

+0

@Arnis。啊好吧。那么,不要理会我的答案。我已经投了你的答案,而不是。 – 2011-03-14 09:42:31

This works。可能有点慢,但我不在乎:

public static class SelectListExtensions{ 
    public static SelectList Without 
    (this SelectList selectList, params int[] what){ 
    var items=selectList.Items.Cast<dynamic>() 
     .Where(x=>!what.Any(z=>x.Value==z)); 
    return new SelectList(items); 
    } 
    public static SelectList Without<T> 
    (this SelectList selectList,params T[] what) where T:Enumeration{ 
    var items=selectList.Items.Cast<dynamic>() 
     .Where(x=>!what.Any(z=>x.Value==z.Value)); 
    return new SelectList(items); 
    } 
} 

更好的方法是值得欢迎的。


没有。这是行不通的。呈现的Html:

<select data-val="true" data-val-required="The JMC decision field is required." 
id="JMCDecisionStatus" name="JMCDecisionStatus"> 
<option>{ Name = Successful, Value = 2 }</option> 
<option>{ Name = Reserved, Value = 3 }</option> 
<option>{ Name = Rejected, Value = 4 }</option> 
</select> 

不完全是我在找什么。 :D

return new SelectList(selectList.Items.Cast<T>().Except(what));