2011-03-14 163 views
1

我想爲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

回答

0

你只需要將一個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

1

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

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