Проверка строкового массива в ASP.NET MVC на стороне клиента - PullRequest
0 голосов
/ 15 января 2019

Это мой первый пост.

Мне нужна проверка массива строк, как показано ниже.

[Required(ErrorMessage = "Content name is required")]
public string[] ContentName { get; set; }

Я нашел сообщение, которое имеет такую ​​же ситуацию .

Этот ответ и следующий код очень помогли мне, и я смог решить свою проблему.

public class StringArrayRequiredAttribute : ValidationAttribute
{
    protected override ValidationResult IsValid (object value, ValidationContext validationContext)
    {
        string[] array = value as string[];

        if(array == null || array.Any(item => string.IsNullOrEmpty(item)))
        {
            return new ValidationResult(this.ErrorMessage);
        }
        else
        {
            return ValidationResult.Success;
        }
    }
}

И

[StringArrayRequired(ErrorMessage = "Content name is required")]
public string[] ContentName { get; set; }

Но теперь я обнаружил другую проблему. Эта проверка работает только на стороне сервера. Я бы тоже хотел получить подтверждение клиента. Потому что это сделало бы моего клиента намного счастливее !!

Так вы бы дали мне хороший способ для этого? Жду ваших ответов !!


Спасибо за вашу помощь. Я пишу короткий код на мой взгляд.

$.validator.addMethod('stringarrayrequired', function (value, element, params) {

    let array = value;

    if (array == null) {
        return false;
    }

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



$.validator.unobtrusive.adapters.add("stringarrayrequired", function (options) {
    options.rules["stringarrayrequired"] = "#" + options.element.name.replace('.', '_'); // mvc html helpers
    options.messages["stringarrayrequired"] = options.message;
});

(Извините, я не владею JS ...) И я добавляю id = "stringarrayrequired" к моему. Но это не работает. Я также проверил HTML-код. Когда я нажимаю кнопку отправки, во входном теге для «ContentName» должно быть class = «input-validation-error» или «valid», но я не могу найти их оба.

Мне все еще нужно больше информации ... Кто-нибудь поможет?


Я нашел способ решить мою проблему.

(я изменил имя свойства ContextName на Selection)

[Display(Name = "Selections")]
public Selection[] Selections { get; set; } 

public class Selection
{
    [Required(ErrorMessage = "SelectionItem is empty")]
    public string SelectionItem { get; set; }
}

Я использую Selections для, SelectionItem для и.

Как вы знаете, атрибут [Обязательный] не работает для строки []. Поэтому я создал класс Selection и изменил строку [] на Selection [] и применил атрибут [Required] к строке.

Я знаю, что это не чистый способ ... Я буду использовать защиту от дурака или что-то в этом роде.

1 Ответ

0 голосов
/ 15 января 2019

Добавьте следующий код javaScript на ваш взгляд:

$.validator.addMethod('stringarrayrequired', function (value, element, params) {
    // here return true or false based on checking the input value
},'');


$.validator.unobtrusive.adapters.add("stringarrayrequired", function (options) {
    options.rules["stringarrayrequired"] = "#" + options.element.name.replace('.', '_'); // mvc html helpers
    options.messages["stringarrayrequired"] = options.message;
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...