2010-06-24 3 views
4

이 양식을 제출할 때마다 Request/ContentType은 application/x-www-form-urlencoded이고 내용은 enctype을 : multipart/form-data로 설정했습니다. Request.Files에서 업로드의 내용을 검색 할 수 없습니다. 여기 ASP.NET MVC2로 파일을 업로드 할 수 없습니다.

<% using (Html.BeginForm("Import", "Content", FormMethod.Post, new { enctype = "multipart/form-data" })) { %> 

<p> 
    <%= Html.CheckBox("DeleteExisting")%> Delete Existing Records? 
</p> 

<p> 
    <input type="file" name="FileUpload" id="FileUpload" /> Select a dump file. 
</p> 

<p> 
    <input type="submit" value="Import Now" /> 
</p> 

<% } %> 

내 작업입니다 : 여기

내보기입니다

 [HttpPost] 
    public ActionResult Import(FormCollection fc) 
    { 
     string chkDelete = fc["DeleteExisting"]; 
     //string filename = fc["FileUpload"]; 

     if (!chkDelete.Equals("false")) 
     { 
      //TODO: delete existing records, if specified 
     } 


     var inputFile = Request.Files["FileUpload"]; 


     return View(); 
    } 

포스트 백에, "FC"변수가 작성되고 난 체크 박스의 값에 액세스 할 수 있고 얻을 수있는 업로드 파일명.

내 enctype이 무시되는 이유는 무엇입니까?

다른 위치에 특성이있는보기에서 양식 태그를 수동으로 넣으려고했지만 아무런 차이가 없습니다.

제가 생각할 수있는 유일한 것은이 가져 오기 양식이 MasterPage의 양식 안에 중첩되어 있지만 문제가 아닌 것 같습니다. 또한이 양식을 제대로 묶었습니다.

제안 사항? 여기 놀이에이 문제가 생각

답변

4

:

내가 생각할 수있는 유일한 것은이 가져 오기 양식은 MasterPage의 형태로 중첩되어 있지만 문제가 될한다처럼 그것이 보이지 않는다는 것입니다 . 또한이 양식을 제대로 묶었습니다.

이것은 아마도 문제의 대부분 - 나를 걱정 두 가지가있다 : - 브라우저는 매우 합법적으로 두 번째 양식 선언을 무시하도록 허용

  1. 중첩 된 형태의 법적 (X) HTML없는이 , 그리고 그것이 오는 첫 번째 양식 태그에서 양식을 닫습니다 - 그래서 당신이보고있는 문제가 될 수 있습니다.
  2. ASP.NET MVC를 다루므로 마스터 페이지에 하나의 커다란 외양을 갖는 이유가 없습니다. 단지 여기에있는 것처럼 보일뿐입니다.

양식을 마스터 페이지에서 제거하고 실제 양식 주위에 필요할 때 추가하는 것이 좋습니다. 그것은 당신이보고있는 문제를 잘 해결할 수 있습니다.

둘째, 당신은 당신의 행동에 HttpPostedFileBase에 따라 매개 변수를 추가해야합니다 : 난 그냥 간단한보기 (더 마스터 페이지, 아니 중첩 된 형태)이 시도하지했습니다

public ActionResult Import(FormCollection fc, HttpPostedFileWrapper FileUpload) 
{ 
    string chkDelete = fc["DeleteExisting"]; 

    if (null != FileUpload && 0 < FileUpload.ContentLength) { 
    // We have an upload. 

    string filename = FileUpload.FileName; 

    if (!chkDelete.Equals("false")) 
    { 
     //TODO: delete existing records, if specified 
    } 

    // Stream file in from FileUpload.InputStream e.g.: 
    var bytesOriginal = new byte[FileUpload.ContentLength]; 
    FileUpload.InputStream.Read(bytesOriginal, 0, FileUpload.ContentLength); 

    //Read from the byte array as you would any normal file. 
    } 

    return View(); 
} 

을하고 HttpPostedFileWrapper없이 FormCollection에만 확인란이 포함되어 있습니다.

+0

추가 매개 변수가 필요하지 않습니다. –

+0

@ jacerhea 흠, 원래 v1에서 만든 건물에서 끊어 질 수 있었고 업로드 된 파일을 넣을 위치가없는 ViewModel을 사용하고 모든 온라인 참조는 내가 얻을 수 없을 것이라고 말했습니다. FormCollection에서 파일을 업로드했습니다 ... –

+0

빠른 응답 Ben을 보내 주셔서 감사합니다. 그러나 HttpPostedFileBase 매개 변수가 도움이되지 않았습니다. 포스트에서 null이었다. –

관련 문제