2011-12-08 6 views
4

さまざまな量のファイルを取り込むことができるファイルアップローダをimplmenetしようとしています。ファイル入力elemntsの名前はすべて同じで、MVC3がうまくバインドするファイルのリストを生成します。リストを検証するには、MVC属性を持つnull以外の要素がゼロより大きい

だから私のコントローラで私はこれはそれが必要すべてのファイルを取得します

public virtual ViewResult UploadReceive(IEnumerable<HttpPostedFileBase> Files){

を持っています。ただし、すべての空のフォームファイル入力要素にはnullが追加されます。これは、私が望むようにコントローラからの私の基本的な空でないリスト検証を停止させています。

検証は以下の通りです:

public class EnsureMinimumElementsAttribute : ValidationAttribute 
{ 
    private readonly int _minElements; 
    public EnsureMinimumElementsAttribute(int minElements) 
    { 
     _minElements = minElements; 
    } 

    public override bool IsValid(object value) 
    { 
     var list = value as IList; 
     if (list != null) 
     { 
      return list.Count >= _minElements; 
     } 
     return false; 
    } 
} 

私は唯一の非null要素を数える包括的に検証をどのように変化するかを任意のアイデア?

+0

あなたのリストは空ではありませんが、ヌル要素を含んでいますか? 'return list.Count(i => i!= null)' –

+0

が動作しません。私はエラーが発生する 'System.Collections.IList'には 'Count'の定義が含まれておらず、 'Count'は 'System.Collections.IList'タイプの最初の引数を受け入れる拡張メソッドではない – GraemeMiller

+0

おそらく 'System.Linq' –

答えて

2

あなただけが使ってIListでLINQを使用することができ、null以外のオブジェクトカウントしたい場合:

list.Cast<object>().Count(o => o != null) 

を代わりにあなただけの各非nullオブジェクトをループしてカウントすることができます。

int count = 0; 
foreach (var item in list) 
{ 
    if (item != null) 
     count++; 
} 
+0

Didierのコメントと少しの考えの後で、これをやっていただけです。しかし、あなたは最初にそこにいた:) – GraemeMiller

関連する問題