Asp.net mvc 5 ASP.NET MVC-“的;“必需”;字符串数组的客户端验证

Asp.net mvc 5 ASP.NET MVC-“的;“必需”;字符串数组的客户端验证,asp.net-mvc-5,unobtrusive-validation,customvalidator,Asp.net Mvc 5,Unobtrusive Validation,Customvalidator,您有没有关于字符串[]的客户端验证的示例 我有以下自定义验证器类,它在服务器端运行良好: public class RequiredRepeatedStrings : ValidationAttribute, IClientValidatable { protected override ValidationResult IsValid(object value, ValidationContext validationContext) { if (value !

您有没有关于字符串[]的客户端验证的示例

我有以下自定义验证器类,它在服务器端运行良好:

public class RequiredRepeatedStrings : ValidationAttribute, IClientValidatable
{
    protected override ValidationResult IsValid(object value, ValidationContext validationContext)
    {
        if (value != null)
        {
            string[] valueAsStringArray = value as string[];

            if (valueAsStringArray == null || valueAsStringArray.Any(x => string.IsNullOrEmpty(x)))
                return new ValidationResult(this.ErrorMessage);
        }

        return ValidationResult.Success;
    }

    public IEnumerable<ModelClientValidationRule> GetClientValidationRules(ModelMetadata metaData, ControllerContext context)
    {
        var rule = new ModelClientValidationRule();
        rule.ErrorMessage = FormatErrorMessage(metaData.GetDisplayName());
        rule.ValidationType = "requiredStrings";
        yield return rule;
    }
}
局部视图(foreach循环中的某个位置):

@foreach(Model.CompanyLocations.SelectedCountry中的var国家/地区)
{
...
@Html.LabelFor(m=>m.CompanyLocations.Address):
@Html.TextBoxFor(m=>m.CompanyLocations.Address[index],新的{placeholder=“Max Mustermann Str.1”,@class=“form control”})
@Html.ValidationMessageFor(m=>m.CompanyLocations.Address,null,新{@class=“text danger”})
...
}
JS适配器:

$.validator.unobtrusive.adapters.add("requiredStrings");
$.validator.addMethod("requiredStrings", function (value, element, params) {

    for (var i = 0; i < value.length; i++) {
        if (value[i] == '') {
            return false;
        }
    }

    return true;
});
$.validator.unobtrusive.adapters.add(“requiredStrings”);
$.validator.addMethod(“requiredStrings”),函数(值、元素、参数){
对于(变量i=0;i
但是客户端验证在这种情况下不起作用。引用已经包含在内,并且自定义验证器的客户端验证在其他情况下也可以工作,例如“如果输入值包含特殊字符”。所以这并不是因为对图书馆的引用等等。代码中的某些内容似乎无法正常工作

场景是,我有一个表单,我可以在其中添加其他位置,每个位置都有一个街道名称。因此,街道名称是一个字符串数组。如果输入字段为空,则它不是null而是“”

有什么想法吗

我已经查看了这篇文章,但没有解决方案:

谢谢


Dee

将您的问题放在问题的顶部可能会更具可读性。要使客户端验证工作,您需要在需要验证的字段上设置属性
data val=“true”
,并使用
data val requiredStrings=“your error message”
设置正确的错误消息。在上面的代码中看不到它。
@foreach (var country in Model.CompanyLocations.SelectedCountry)
{
...
    <div class="form-group add_top_60">
        @Html.LabelFor(m => m.CompanyLocations.Address):
        @Html.TextBoxFor(m => m.CompanyLocations.Address[index], new { placeholder = "Max-Mustermann Str. 1", @class = "form-control" })
        <i class="icon_mail_alt" style="top: 32px;"></i>
        @Html.ValidationMessageFor(m => m.CompanyLocations.Address, null, new { @class = "text-danger" })
    </div>
...
}
$.validator.unobtrusive.adapters.add("requiredStrings");
$.validator.addMethod("requiredStrings", function (value, element, params) {

    for (var i = 0; i < value.length; i++) {
        if (value[i] == '') {
            return false;
        }
    }

    return true;
});