Asp.net mvc,修改SelectList

时间:2011-03-14 09:21:55

标签: asp.net-mvc

我正在尝试为SelectList编写简单的扩展方法。 API让我困惑。

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

它应该返回具有相同项目的新选择列表,其中一个值与参数val匹配。

3 个答案:

答案 0 :(得分:1)

这很有效。可能有点慢,但我不在乎:

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

答案 1 :(得分:0)

您是否只需要将ToArray()应用于IEnumerable集合?

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

答案 2 :(得分:0)

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