Ich entwickle eine benutzerdefinierte ASP.NET MVC 5.2.3 Annotation für die Validierung in Visual Studio 2015. Es muss eine beliebige Anzahl von Feldern nehmen und sicherstellen, dass, wenn man einen Wert hat, sie müssen alle einen Wert haben; Wenn sie alle null/leer sind, sollte es in Ordnung sein.ASP.NET MVC benutzerdefinierte mehrere Felder Validierung
Einige Beispiele haben dazu beigetragen:
- 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/
Aber ich bin nicht sicher, wie die clientseitige Validierung zu tun, wo Sie eine haben unbekannte Anzahl von Feldern wird validiert.
Wie übergeben Sie das an den Client mit der Implementierung der GetClientValidationRules()
Methode der IClientValidatable
Schnittstelle?
Wie kann ich diese neue Datenannotation auch auf die Eigenschaften in meinem Ansichtsmodell anwenden? Würde es so aussehen?
[MultipleRequired("AppNumber", "UserId", /* more fields */), ErrorMessage = "Something..."]
[DisplayName("App #")]
public int AppNumber { get; set; }
[DisplayName("User ID")]
public int UserId { get; set; }
Hier ist so weit ich mit der MultipleRequiredAttribute
benutzerdefinierten Daten Annotation-Klasse bekommen konnte:
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"
};
}
}
Danke.
Sie eine benutzerdefinierte Funktion für Plugin js jquery Validate bauen – Steve
Beginnen Sie mit dem Lesen der vollständigen Anleitung zur Validierung in ASP.NET MVC 3 - Teil 2] (http://www.devtrends.co.uk/blog/the-complete-guide-to-validation-in-asp.net -mvc-3-Teil-2). Fügen Sie in Ihrer 'GetClientValidationRules()' Methode eine 'ModelClientValidationRule' hinzu, in der Sie eine durch Kommas getrennte Liste der Eigenschaftsnamen übergeben können - also Ihre' fields' Werte - die in den clientseitigen Skripten analysiert und verwendet werden können (Wenn Sie Probleme haben, lassen Sie es mich wissen und ich werde eine Antwort hinzufügen, werde aber keine Chance für ein paar Stunden bekommen) –
Danke, @StephenMuecke! Eines meiner Probleme war, wie man die Werte an den Kunden weitergibt. – Alex