2013-04-11 2 views
3

Я использую структуру MVC 4 в своем проекте C#. Я сделал страницу, которая добавляет объявления в мою БД (путь) и фактическое изображение в папку.Тип входного файла, обязательный атрибут не работает

Код работает, но я хочу создать безопасный механизм, который предотвращает отправку пустого входного файла (селектор изображений) на . Я узнал, что HTML 5 поддерживает «обязательный» атрибут, но у меня все еще есть некоторые проблемы остались.

Когда я нажимаю кнопку отправки (когда нет выбранного изображения), она помечает поле , но код позади (метод UploadAd в UploadController) по-прежнему запущен. Что вызывает это?

После изображений и код может сделать его легче понять:

Посмотреть код: http://pastebin.com/s9eWn4zW

контроллер код + сайт проверки: http://oi47.tinypic.com/23leeef.jpg

+0

Вы можете поставить необходимый атрибут вашей модели представления, так что не удается линию ModelState.IsValid ? Это все равно заставляет его публиковать, но если вы посмотрите на MVC Unobstusive Validation, это может помешать его публикации путем проверки клиентов. – CorrugatedAir

+0

Я хочу поблагодарить вас, Shyju и Ismet за ваши ответы. Я нашел очень легкую проверку http://stackoverflow.com/questions/5929186/how-to-prevent-form-submission-while-using-html5-client-side-form-validation-in – Jdruwe

+0

, пожалуйста, создайте ответ и принимайте его, чтобы другие могли извлечь выгоду. –

ответ

0

Вы можете добавить атрибут required на стороне клиента и проверить его когда пользователь нажимает кнопку submit. Также Вы должны выполнить проверку на стороне сервера. Проверьте, есть ли файл существовать перед сохранением

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

Я предлагаю использовать дополнительный атрибут на стороне клиента, называемый FileName, который будет проходить в вашем Model классе следующим образом:

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

Добавить JavaScript строки тоже редактирование FileName textbox как файл выбран для увеличения. При этом произойдет client-side controls и запретит отправку формы на ваш контроллер, если файл не выбран.

0

на страницах создания объявлений использует следующие формы:

@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 скрипт из его работы:

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


    } 
    $("#adForm").bind("submit", manualValidate); 
</script> 
Смежные вопросы