Это мой первый пост.
Мне нужна проверка массива строк, как показано ниже.
[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] к строке.
Я знаю, что это не чистый способ ... Я буду использовать защиту от дурака или что-то в этом роде.