ASP. NET MVC - «Требуется» проверка на стороне клиента для строковых массивов - PullRequest
0 голосов
/ 26 февраля 2020

У вас есть примеры того, как должна выглядеть проверка клиента для строки []?

У меня есть следующий пользовательский класс валидатора, который отлично работает на стороне сервера:

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;
    }
}

Моя модель:

[RequiredRepeatedStrings(ErrorMessage = "Bitte eine Anschrift eingeben!")]
[Display(Name = "Anschrift")]
public string[] Address { get; set; }

Частичное представление (где-то в foreach l oop):

@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>
...
}

Адаптер 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;
});

Но проверка на стороне клиента в этом случае не работает. Ссылки уже включены, и проверка на стороне клиента для пользовательского валидатора работает в других случаях, например, «если входное значение содержит специальные символы». Так что не из-за ссылок на библиотеки и тд. Кажется, что-то с кодом не работает должным образом.

Сценарий заключается в том, что у меня есть форма, в которой я могу добавить дополнительные местоположения, и каждое местоположение имеет, например, название улицы. Поэтому название улицы является строковым массивом. Если поле ввода пустое, оно не является нулевым, а ''.

Есть идеи?

Я уже проверил этот пост, но там нет решения: Проверить строковый массив в ASP. NET MVC на стороне клиента

Спасибо

Ди

...