使用 jquery 不显眼地在客户端验证 HttpPostedFileBase
Validating HttpPostedFileBase on client side with jquery unobtrusive
我的网站上有 jquery(原创、验证且不引人注目)。我已经扩展了一个在服务器端工作的验证属性,但我不能在我的生活中让它在客户端工作。我错过了什么?
我的模型是这样的:
[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)
我的控制器工作正常并且可以上传有效的图像。有什么想法可以继续吗?
编辑:我也尝试过使用 this ,但这对我的客户端也不起作用,我无法自定义错误消息。
由于没有答案,我会分享一些信息,以防其他人遇到与我相同的问题。
我最终按照 link @Stephen Muecke 提供的 (here) 解决了这个问题。我的问题是没有正确配置 javascript,因为我不明白将每个变量放在哪里。
我的网站上有 jquery(原创、验证且不引人注目)。我已经扩展了一个在服务器端工作的验证属性,但我不能在我的生活中让它在客户端工作。我错过了什么?
我的模型是这样的:
[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)
我的控制器工作正常并且可以上传有效的图像。有什么想法可以继续吗?
编辑:我也尝试过使用 this ,但这对我的客户端也不起作用,我无法自定义错误消息。
由于没有答案,我会分享一些信息,以防其他人遇到与我相同的问题。
我最终按照 link @Stephen Muecke 提供的 (here) 解决了这个问题。我的问题是没有正确配置 javascript,因为我不明白将每个变量放在哪里。