0

У меня есть jquery (original, validate & ненавязчивый) на моем сайте. Я расширил атрибут проверки, который работает на стороне сервера, но я не могу на всю жизнь заставить его работать на стороне клиента. Что мне не хватает?Проверка HttpPostedFileBase на стороне клиента с jquery unobtrusive

Моя модель выглядит следующим образом:

[Display(Name = "UploadFile"), DataType(DataType.Upload)] 
[ValidateFile] 
public IEnumerable<HttpPostedFileBase> MyImage { get; set; } 

Я добавил это расширение атрибута моей модели:

public class ValidateFileAttribute : ValidationAttribute 
{ 
    public override bool IsValid(object value) 
    { 
     int MaxContentLength = 1024 * 1024 * 10; //10 MB 
     string[] AllowedFileExtensions = new string[] { ".jpg", ".gif", ".png", ".pdf" }; 
     var files = value as IEnumerable<HttpPostedFileBase>; 

     foreach (var file in files) 
     { 
      if (file == null) 
      { 
       return false; 
      } 
      else if (!AllowedFileExtensions.Contains(file.FileName.Substring(file.FileName.LastIndexOf('.')))) 
      { 
       ErrorMessage = Resources.ResourcesAdvert.AdvertUploadFileExtensionErrorShorter + string.Join(", ", AllowedFileExtensions); 
       return false; 
      } 
      else if (file.ContentLength > MaxContentLength) 
      { 
       ErrorMessage = Resources.ResourcesAdvert.AdvertUploadFileTooBig + (MaxContentLength/1024).ToString() + "MB"; 
       return false; 
      } 
      else 
      { 
       return true; 
      } 
     } 
     return false; 
    } 
} 

Я получил представление, как это:

@Html.LabelFor(x => x.MyImage) 

<input type="file" name="MyImage[0]" id="MyImage1" /> 
<input type="file" name="MyImage[1]" id="MyImage2" /> 
<input type="file" name="MyImage[2]" id="MyImage3" /> 

@Html.ValidationMessageFor(x => x.MyImage) 

Мой контроллер работает нормально, и он работает для загрузки изображений, если они действительны. Любые идеи, как я мог продолжить?

EDIT: Я также пытался использовать this, но это не сработало для меня на стороне клиента, и я не смог настроить сообщение об ошибке.

+0

Лучше всего создавать отдельные атрибуты проверки для FileSize и FileType. См. [Этот ответ] (http://stackoverflow.com/questions/33414158/checking-image-mime-size-etc-in-mvc/33426397#33426397) для примера «FileTypeAttribute» –

+0

Вероятно, идея. Я начну работать над этим. – guitarzero

+0

См. Также [эту статью] (http://www.devtrends.co.uk/blog/the-complete-guide-to-validation-in-asp.net-mvc-3-part-2) для хорошего руководства для создания атрибутов проверки, которые поддерживают проверку на стороне клиента. –

ответ

0

Поскольку ответа не было, я поделюсь информацией, если кто-то другой сталкивается с той же проблемой, что и я.

В конце концов я решил его, выполнив ссылку @Stephen Muecke (here). Моя проблема заключалась в неправильной настройке javascript, так как я не понимал, где разместить каждую переменную.