Я разрабатываю аннотацию пользовательских данных ASP.NET MVC 5.2.3 для проверки в Visual Studio 2015. Для этого необходимо выполнить любое количество полей и убедиться, что, если у вас есть значение, все они должны иметь ценность; если все они пустые/пустые, все должно быть в порядке.ASP.NET MVC выборочная проверка нескольких полей
Несколько примеров помогли:
- ASP.NET MVC implement custom validator use IClientValidatable
- MVC Form Validation on Multiple Fields
- http://www.macaalay.com/2014/02/24/unobtrusive-client-and-server-side-age-validation-in-mvc-using-custom-data-annotations/
Однако, я не уверен, как это сделать на стороне клиента проверки, где у вас есть неизвестное количество проверяемых полей.
Как передать это клиенту, используя реализацию метода GetClientValidationRules()
интерфейса IClientValidatable
?
Также, как применить эту новую аннотацию данных к свойствам моей модели представления? Будет ли это выглядеть так?
[MultipleRequired("AppNumber", "UserId", /* more fields */), ErrorMessage = "Something..."]
[DisplayName("App #")]
public int AppNumber { get; set; }
[DisplayName("User ID")]
public int UserId { get; set; }
Вот насколько я мог бы получить с MultipleRequiredAttribute
пользовательского класса аннотаций данные:
public class MultipleRequiredAttribute : ValidationAttribute, IClientValidatable
{
private readonly string[] _fields;
public MultipleRequiredAttribute(params string[] fields)
{
_fields = fields;
}
protected override ValidationResult IsValid(object value, ValidationContext validationContext)
{
// If any field has value, then all must have value
var anyHasValue = _fields.Any(f => !string.IsNullOrEmpty(f));
if (!anyHasValue) return null;
foreach (var field in _fields)
{
var property = validationContext.ObjectType.GetProperty(field);
if (property == null)
return new ValidationResult($"Property '{field}' is undefined.");
var fieldValue = property.GetValue(validationContext.ObjectInstance, null);
if (string.IsNullOrEmpty(fieldValue?.ToString()))
return new ValidationResult(FormatErrorMessage(validationContext.DisplayName));
}
return null;
}
public IEnumerable<ModelClientValidationRule> GetClientValidationRules(ModelMetadata metadata, ControllerContext context)
{
yield return new ModelClientValidationRule
{
ErrorMessage = ErrorMessage,
ValidationType = "multiplerequired"
};
}
}
Спасибо.
вы можете построить функцию JQuery Validate расслоения плотной плагин на стороне клиента – Steve
Начать чтение [Полное руководство по валидации в ASP.NET MVC 3 - часть 2] (http://www.devtrends.co.uk/blog/the-complete-guide-to-validation-in-asp.net -mvc-3-часть-2). В методе 'GetClientValidationRules()' вы добавляете 'ModelClientValidationRule', где вы можете передать (например) список разделенных запятыми имен свойств - то есть ваши значения' fields' - которые могут быть проанализированы и использованы в сценариях на стороне клиента (если у вас есть проблемы, дайте мне знать, и я добавлю ответ, но не получаю шанс на несколько часов) –
Спасибо, @StephenMuecke! Одна из моих проблем заключалась в том, как передать значения клиенту. – Alex