2013-04-11 4 views
3

C# 프로젝트에서 MVC 4 프레임 워크를 사용하고 있습니다. 내 DB (경로)에 광고를 추가 한 페이지와 폴더에있는 실제 이미지를 만들었습니다.입력 형식 파일, 필수 특성이 작동하지 않습니다.

코드가 작동하지만 페이지에서 빈 입력 파일 (이미지 선택기)을 게시하지 못하도록하는 안전 메커니즘을 구축하고 싶습니다. HTML 5가 "필수"속성을 지원한다는 것을 알았지 만 여전히 몇 가지 문제가 남아 있습니다.

이미지가 선택되어 있지 않을 때 제출 버튼을 누르면 필드에 표시되지만 코드 숨김 (UploadController의 UploadAd 메소드)은 여전히 ​​실행됩니다. 이 문제의 원인은 무엇입니까?

보기 코드 : http://pastebin.com/s9eWn4zW

컨트롤러 코드 + 사이트 확인 : http://oi47.tinypic.com/23leeef.jpg

+0

당신이 당신의보기 모델에 필요한 속성을 넣을 수는 ModelState.IsValid 라인에 실패 있도록 :

@using (Html.BeginForm("UploadAd", "Upload", FormMethod.Post, new { enctype = "multipart/form-data", id = "adForm" })) { ... <div class="editor-label"> <p>Photo</p> </div> <div class="editor-field"> <input type="file" id="files" name="files[]" multiple required/> </div> } 

추가 folowing 스크립트가 작동했다 : – CorrugatedAir

+0

당신, 당신의 답변에 대해 당신, 수주 그리고 Ismet에게 감사하고 싶습니다. 매우 쉬운 검증을 찾았습니다. http://stackoverflow.com/questions/5929186/how-to-prevent-form-submission-while-using-html5-client-side-form-validation-in – Jdruwe

+0

답변을 작성하십시오. 그것을 받아들이면 다른 사람들이 유익을 얻을 수 있습니다. –

답변

0

당신은 클라이언트 측에 required 속성을 추가하고 유효성을 검사 할 수 있습니다 이미지와 코드를 다음

보다 쉽게 ​​이해할 수 있도록 수 사용자가 제출을 클릭하면 서버 측에서도 유효성 검사를 수행해야합니다.

[Required(AllowEmptyStrings = false, ErrorMessage = "You must add a file.")] 
public string FileName { get; set; } 

<div class="editor-label">File</div> 
<div class="editor-field"> 
    <input type="file" //yourCustomAttributes /> 
    <input type="text" name="FileName" readonly /> 
    @Html.ValidationMessageFor(model => model.FileName) 
</div> 

자바 스크립트 줄을 추가 파일이 내가 여분의 클라이언트 측 속성을 사용하는 것이 좋습니다

foreach(var postedFile in Request.Files) 
{ 
    if (postedFile!= null && postedFile.ContentLength > 0) 
    { 
     // good ! Save now 
    } 
} 
0

를 저장하기 전에 존재 여부 확인, 다음과 같이 Model 클래스에서 개최되는 FileName라고 파일을 uploded로 선택하면 FileName textbox을 편집하십시오. 이를 통해 client-side controls이 발생하고 파일을 선택하지 않으면 양식이 컨트롤러에 제출되지 않습니다.

<script> 
    function manualValidate(ev) { 
     if (ev.target.checkValidity()) { 
      return true; 
     } else { return false;} 


    } 
    $("#adForm").bind("submit", manualValidate); 
</script> 
0

광고 만들기 페이지

양식 다음 사용 ? 이것은 여전히 ​​게시 할 것이지만, MVC Unobstrusive Validation을 살펴보면 클라이언트 측 검증으로 게시를 막을 수 있습니다.