2011-10-11 3 views
2

파일 업 로더를 작동 시키려고합니다. 튜토리얼 "A Back To Basics Case Study: Implementing HTTP File Upload with ASP.NET MVC including Tests and Mocks"을 따르고 있지만 시간이 부족해서 ASP.NET MVC를 처음 사용하기 때문에 TDD을 사용하고 있지 않습니다.foreach 루프를 사용한 파일 업로드 오류입니다. "... 'GetEnumerator'에 대한 공용 정의가 없습니다."

나는 내가 runtine에서 다음과 같은 오류가 (상황의 차이를 조정하기 위해 약간의 수정과)에서 제공하는 예제 코드를 사용하는 경우 :

컴파일러 오류 메시지 : CS1579 : foreach 문이의 변수에 작동 할 수 없습니다 유형 'AnswerApp.Models.ViewDataUploadFilesResult' 'AnswerApp.Models.ViewDataUploadFilesResult은'에 대한 공공의 정의가 포함되어 있지 않기 때문에 'GetEnumerator를'

이 캐스트를 사용하고는 IEnumerable과 같은 변수 VAR를 선언에 대한 제안하고 있지만, 아무도이 없었다 나를 위해 일했다. 며칠 동안 문제를 조사하고 내 자신의 열거자를 작성하려고했지만 컴파일러는이 경우에도 GetEnumerator 함수를 볼 수 없습니다. 내 컨트롤러에서

:

public ActionResult ViewAnswer(ViewDataUploadFilesResult model) 
    { 
     List<ViewDataUploadFilesResult> r = new List<ViewDataUploadFilesResult>(); 

     foreach (string file in Request.Files) 
     { 
      HttpPostedFileBase hpf = Request.Files[file] as HttpPostedFileBase; 
      if (hpf.ContentLength == 0) 
       continue; 
      string savedFileName = Path.Combine(
       AppDomain.CurrentDomain.BaseDirectory, 
       Path.GetFileName(hpf.FileName)); 
      hpf.SaveAs(savedFileName); 

      r.Add(new ViewDataUploadFilesResult() 
      { 
       Name = savedFileName, 
       Length = hpf.ContentLength 
      }); 
     } 
     return View(model); 
    } 

내 모델에서 :

public class ViewDataUploadFilesResult 
{ 
    public string Name { get; set; } 
    public int Length { get; set; } 
} 

내보기에서는 :

<ul> 
<% foreach (AnswerApp.Models.ViewDataUploadFilesResult v in this.ViewData.Model) { %> 
     <%=String.Format("<li>Uploaded: {0} totalling {1} bytes.</li>",v.Name,v.Length) %> 
<% } %> 
</ul> 

나는 내 자신의 열거를 생성해야 하는가? 그렇다면, 어떻게 그렇게 할 것인가. 또한 foreach 루프에서 인식 할 수있게하려면 어떻게해야합니까? (현재 GetEnumerator 메서드를 만들면 여전히 sam 오류가 발생하므로 루프가 존재하지 않아도 foreach 루프에는 보이지 않습니다.)

답변

3

바인딩 할보기가 필요합니다. ViewDataUploadFilesResult의 IEnumerable을 대신 ViewDataUploadFilesResult :

View(r); 

그리고 당신의 ViewAnswer 액션 수오 :

IEnumerable<ViewDataUploadFilesResult> 

그런 다음 당신의 행동은 하나 개의 결과 대신 목록에서보기를 호출

사람들이 매개 변수를 루틴에 전달하지 못하게하려면 매개 변수를 가져 가지 마십시오.

관련 문제