2012-03-18 2 views
0

내보기 페이지에서 1 ~ 5 개의 이미지를 컨트롤러로 전달하고 있습니다.C# 목록 컬렉션의 정확한 요소 수를 알 수있는 방법

<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 /> 

나는이

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 에 다른 데이터와 함께이 데이터를 전송 전체 목록의 용량, 그래서 내가 게시물을 할 때 5 번 대신 2 번 이미지를 말하게하면 문제가 발생하여 5 번 반복 할 수 있습니다.

그래서 질문은 목록의 요소 수를 얻는 방법입니다. 용량 없음.

고맙습니다.

+1

에 대한 루프가 외부의 점은 무엇입니까? 바깥 쪽과 내부 foreach 루프에서 컬렉션을 반복하고있는 것처럼 보입니다. 따라서 이미지 수를 제곱하고 있습니다 : Images.Count = 5 => Photos.Count = 25; Images.Count = 2 => Photos.Count = 4. – sheikhjabootie

+0

첫 루프에서 for 루프없이 시도했습니다. 그럼 제안은 뭐니? – BobRock

+1

for-loop를 제거하십시오. 그리고 foreach-loop를 유지하십시오. 일부 이미지가 비어있는 것이 문제 인 경우 foreach 루프의 내용을 if (image.ContentLength> 0) {...} 블록으로 래핑 할 수 있습니다. 그렇게하면 실제로 내용이있는 이미지 만 추가됩니다. 페이지의 코드가 올바른 수의 이미지 만 제출하면 더 좋을 것입니다. – 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

나는이 접근법이 효과가있을 것이라고 확신했지만, 지금은이 코드를 시도했지만 운이 없다. 개체 참조가 개체의 인스턴스로 설정되지 않았습니다. foreach 루프에서 업로드 할 이미지를 두 개 선택하면 세 번째 시도에서 오류가 발생합니다. (image.ContentLength> 0) 비트 혼동 – BobRock

+0

아, 그 전에 이미지가 널인지 확인해야합니다. ContentLength 속성에 액세스하십시오. 위의 예를 편집했습니다. – sheikhjabootie

1

ContentLength이 null이 아닌지 테스트 할 수 있습니까 (아니면 "이미지"가 제출되었는지 확인하는 다른 속성이 있습니까)?

그럼 당신은 Linq에를 사용하여 수행 할 수 있습니다 int nbImages = Images.Count(i => i.ContentLength > 0);

+0

디버그 모드에서 이미지를 올바르게 제출하고 두 이미지를 게시하면 이 루프에서 처음 두 번의 시도는 괜찮습니다. 포토 컬렉션은 성공적으로 채워지지만 세 번째 시도에서 5 개의 요소 용량을 읽었으므로 깨졌습니다. – BobRock

+0

실제로 도움이 if (image! = null && image.ContentLength> 0) 감사합니다. 문제가 해결되었습니다. – BobRock

관련 문제