У меня есть 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, но это не сработало для меня на стороне клиента, и я не смог настроить сообщение об ошибке.
Лучше всего создавать отдельные атрибуты проверки для FileSize и FileType. См. [Этот ответ] (http://stackoverflow.com/questions/33414158/checking-image-mime-size-etc-in-mvc/33426397#33426397) для примера «FileTypeAttribute» –
Вероятно, идея. Я начну работать над этим. – guitarzero
См. Также [эту статью] (http://www.devtrends.co.uk/blog/the-complete-guide-to-validation-in-asp.net-mvc-3-part-2) для хорошего руководства для создания атрибутов проверки, которые поддерживают проверку на стороне клиента. –