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
。
答
你只需要将一个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));
您可以扩展您的方法不工作的哪一点? – 2011-03-14 09:29:34
@Mark'selectList.Items.Where(x => x.Value!= val)'因为Items.GetType == typeof(IEnumerable)' – 2011-03-14 09:32:29