2012-01-31 2 views
2

파일 업로드 컨트롤이있는 모델에 바인딩 된 MVC3 양식이 있습니다. (간결함을 제거 추가 HTML) :파일 업로드로 인해 모델 유효성 검사 실패

@model Models.MessageModel 

<script type="text/javascript"> 
    var numAttachments = 0; 
    $(function() { 
     $(".add-attachment").click(function() { 
      $(".attachments").append("<div><input type=\"file\" name=\"attachments\" id=\"attachment" + numAttachments + "\" /></div>"); 
     }); 
    }); 
</script> 

@using (Html.BeginForm()) 
{ 
    @Html.ValidationSummary() 
     <div class="field-label">Subject: 
      @Html.EditorFor(model => model.Subject) 
     </div> 
     <div class="attachments"> 
     </div> 
     <div> 
      <a href="javascript:void(0);" class="add-attachment">Add Attachment</a> 
     </div> 
     <div class="message-text">@Html.TextAreaFor(model => model.Text, new { cols = 107, rows = 10 })</div> 
     <input type="submit" value="Send Message" /> 
    </div> 
} 

사용자가 링크 "첨부 파일을 추가", 첨부 파일이 필요하지 않은 클릭하여 여러 첨부 파일을 추가 할 수 있습니다. 다음과 같이

내 모델은 다음과 같습니다

public class MessageModel 
{ 
    [Required] 
    public string Subject { get; set; } 

    [Required] 
    public string Text { get; set; } 

    public IEnumerable<HttpPostedFileBase> Attachments { get; set; } 
} 

(참고 : 나는 또한 같은 결과를 내 액션 메소드에 인자로 모델 중 첨부 파일을 이동하려고했습니다)

내 작업 :

[HttpPost] 
public ActionResult New(MessageModel message) 
{ 
    // this check passes if no file is uploaded 
    // but once a file is uploaded, this evaluates to false 
    // even if the model is valid 
    if (ModelState.IsValid) 
    { 
     // do stuff 
    } 
} 

이 양식은 정상적으로 작동하며 업로드를 위해 파일을 선택하지 않으면 유효성 검사가 통과됩니다. 업로드 할 파일을 선택하면 ModelState.IsValid이 거짓이됩니다. 업로드 된 파일을 무시하도록 유효성을 검사하려면 어떻게해야합니까?

답변

2

양식에 올바른 "enctype"이 사용되는지 확인해야합니다.

@using (Html.BeginForm("New", "Controller", FormMethod.Post, new { enctype = "multipart/form-data" })) 

MVC 3 file upload and model binding

+0

을했다! 감사! –