【问题标题】:Validating HttpPostedFileBase on client side with jquery unobtrusive使用 jquery 在客户端验证 HttpPostedFileBase 不显眼
【发布时间】:2016-02-07 10:14:30
【问题描述】:

我的网站上有 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 ,但这对我的客户端也不起作用,我无法自定义错误消息。

【问题讨论】:

  • 最好为 FileSize 和 FileType 创建单独的验证属性。有关FileTypeAttribute 的示例,请参阅this answer
  • 可能是个好主意。我会开始努力的。
  • 另请参阅 this article 以获得创建支持客户端验证的验证属性的良好指南
  • 感谢您的建议。我会看看这篇文章。

标签: jquery asp.net-mvc file-upload unobtrusive-validation unobtrusive-javascript


【解决方案1】:

由于没有答案,我将分享一些信息,以防其他人遇到与我相同的问题。

我最终通过@Stephen Muecke 提供的链接 (here) 解决了这个问题。我的问题是没有正确配置 javascript,因为我不知道将每个变量放在哪里。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-02-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-10
    • 1970-01-01
    • 2012-07-11
    • 1970-01-01
    相关资源
    最近更新 更多