如何验证文件';在ASP.NET MVC 5项目中,使用jquery验证的大小是否不引人注目?

如何验证文件';在ASP.NET MVC 5项目中,使用jquery验证的大小是否不引人注目?,jquery,asp.net-mvc-5,jquery-validate,unobtrusive-validation,Jquery,Asp.net Mvc 5,Jquery Validate,Unobtrusive Validation,我有一个web项目,它是在ASP.NET MVC 5框架之上使用c#编写的。我正在使用jqueryvalidation unobtrusive包来建立客户端验证。我正在尝试添加一个名为filesize的新规则,该规则检查附加文件的大小 因此,当附加文件的大小大于允许的大小时,我想显示客户端大小错误消息 我创建了一个属性,以便能够在视图模型中使用它来装饰我的HttpPostedFileBase属性,以设置允许的最大大小。课堂上展示了我是如何使用它的 然后,在我的javascript文件中,我添加了

我有一个web项目,它是在ASP.NET MVC 5框架之上使用c#编写的。我正在使用
jqueryvalidation unobtrusive
包来建立客户端验证。我正在尝试添加一个名为
filesize
的新规则,该规则检查附加文件的大小

因此,当附加文件的大小大于允许的大小时,我想显示客户端大小错误消息

我创建了一个属性,以便能够在视图模型中使用它来装饰我的
HttpPostedFileBase
属性,以设置允许的最大大小。课堂上展示了我是如何使用它的

然后,在我的javascript文件中,我添加了以下代码来注册一个在中调用的新方法

模型

看法

我可以看到适配器正在注册,但没有调用该方法

当用户上传超过设置的文件大小时,我希望显示一条错误消息,但是当附加文件时,不会调用该消息

我创建了一个存储库来显示如何不调用
$.validator.addMethod(“filesize”,函数(值、元素、参数)
,可以从


我在这里做错了什么?如何使用
$注册
filesize
方法。验证器

您对
图片的文件输入是隐藏的,默认情况下,隐藏的输入不会被验证

您可以通过包含以下脚本来覆盖默认值

$.validator.setDefaults({ 
    ignore: [] 
});
或者,如果您有其他不希望验证的隐藏元素,那么您可以给元素一个类名(比如
class=“fileinput”
)并使用


当一个名为
unobtrusivevalidation
的标签已经存在时,请不要创建一个名为
jquery validate unobtrusivevalidation
的新标签。您在
console.log('Dumping the file object',element.files[0]);
中有一个简单的输入错误,这会导致脚本失败-它的
元素.files[0]
作为旁注,不要将多个验证条件组合到一个属性中。您应该有一个单独的
FileTypeAttribute
(请参阅示例)注意,这些脚本不应包装在
$(document).ready()中
如果您已经这样做了,请查看您的回购协议。您有一个
图片
的隐藏输入-默认情况下,隐藏输入不会被验证(但您可以覆盖验证器以包含它们-请参阅示例)
<div class="form-group" id="Picture_Block">
    <label class="control-label col-md-2" for="Picture">Picture</label>
    <div class="col-md-10">
        <div class="input-group uploaded-file-group max-input-width">
            <label class="input-group-btn">
                <span class="btn btn-default">
                    Browse 
                    @Html.HiddenFor(x => x.Picture, new { @class= "hidden force-validaion", type = "file" })
                </span>
            </label>
            <input class="form-control uploaded-file-name" readonly="" type="text">
        </div>
        @Html.ValidationMessageFor(x => x.Picture)
    </div>
</div>
$.validator.addMethod("filesize", function (value, element, param) {
    if (value === "") {
        return true;
    }
    var maxBytes = parseInt(param);
    if (element.files !== undefined && element.files[0] !== undefined && element.files[0].size !== undefined) {
        console.log('Dumping the file object', element.files[0]);
        var filesize = parseInt(element.files[0].size);
        return filesize <= maxBytes;
    }
    return true;
});
$.validator.unobtrusive.adapters.add('filesize', ['maxfilesize'], function (options) {
    // set the parameter
    options.rules['filesize'] = options.params.maxfilesize;
    if (options.message) {
        // If there is a message, set it for the rule
        options.messages['filesize'] = options.message;
    }
});
$.validator.setDefaults({ 
    ignore: [] 
});
$.validator.setDefaults({ 
    ignore: ":hidden:not('.fileinput')"
});