2012-03-18 4 views
0

私のビューページからコントローラーに1〜5のイメージを渡しています。私はこのC#リストコレクションの要素の正確な数を知る方法

IEnumerable<HttpPostedFileBase> images 

と、私はこの

List<Photo> Photos = new List<Photo>(); 
for (int i = 0; i < Images.Count(); i++) 
{ 
    foreach (var image in Images) 
    { 
     Photo p = new Photo(); 
     p.ImageMimeType = image.ContentType; 
     p.ImageData = new byte[image.ContentLength]; 
     image.InputStream.Read(p.ImageData, 0, image.ContentLength); 

     Photos.Add(p); 
    }     
} 

しかしImages.Count()の戻りを試してみましたmyDomainModel に他のデータと一緒にこのデータを送信するように私のコントローラ上で受信

<input type="file" name="Images" /><br /> 
    <input type="file" name="Images" /><br /> 
    <input type="file" name="Images" /><br /> 
    <input type="file" name="Images" /><br /> 
    <input type="file" name="Images" /><br /> 

全体の容量は、私が投稿したときに5つの代わりに2つの画像を言うようになりました。

リストの要素の数を取得する方法です。能力はありません。

ありがとうございます。

+1

forループ、外側のポイントは何ですか?外側のforeachループと内側のforeachループのコレクションをループしているように見えるので、画像の数を二乗しています:Images.Count = 5 => Photos.Count = 25; Images.Count = 2 => Photos.Count = 4 – sheikhjabootie

+0

私は最初の場所でforループなしで試しました。だからあなたは提案がありますか? – BobRock

+1

forループを削除します。 foreachループを維持する。問題がいくつかの画像が空である場合は、if(image.ContentLength> 0){...}ブロックにforeach-loopの内容をラップすることができます。そうすれば、実際にコンテンツを持つ画像だけが追加されます。ページ上のコードが適切な数の画像しか提出しない方が良いでしょう。 – sheikhjabootie

答えて

1

それは何が起こっているのか明確ではないのです。ソースページには、ユーザーが送信しなかった空のイメージが追加されているようですね。そうであれば、それを修正する方がいいでしょう。そして、これは動作するはずです、それに失敗

var Photos = new List<Photo>(); 

foreach (var image in Images) 
{ 
    if(image != null && image.ContentLength > 0) 
    { 
     Photo p = new Photo(); 
     p.ImageMimeType = image.ContentType; 
     p.ImageData = new byte[image.ContentLength]; 
     image.InputStream.Read(p.ImageData, 0, image.ContentLength); 

     Photos.Add(p); 
    } 
} 
+0

私はこのアプローチがうまくいくと確信していましたが、今はこのコードを試しましたが運はありません。 オブジェクト参照がオブジェクトのインスタンスに設定されていません。 私は3回目の試みエラーのforeachループ内でアップロードする2枚の画像を選択した場合は、ライン上でスローされた場合(image.ContentLength> 0) ビット – BobRock

+0

はああ、その場合には、あなたがイメージがあなたの前にnullであるかどうかを確認する必要が混乱ContentLengthプロパティにアクセスします。私は上記の例を編集しました。 – sheikhjabootie

1

ContentLengthがヌルでないかどうかをテストできますか(または「画像」が送信されているかどうかを確認する他のプロパティがありますか)?

その後は、LINQのを使用して行うことができます。int nbImages = Images.Count(i => i.ContentLength > 0);

+0

私はデバッグモードで画像を正しく表示しています。このループで最初の2回の試行はOKですが、Photosコレクションは正常に埋められますが、3回目の試行で5つの要素の容量が読み込まれるため、破損します。 – BobRock

+0

実際にはこれが役に立ちます if(image!= null && image.ContentLength> 0) ありがとう、問題は解決しました。 – BobRock

関連する問題