Ho un ValidationAttribute che ho creato e che è condiviso tra Server e Client. Per ottenere l'attributo di validazione da generare correttamente al client quando si fa riferimento a una classe helper di dati, dovevo essere molto specifico nel modo in cui l'ho creato.ValidationErrors of custom ValidationAttribute non visualizzato in modo corretto
Il problema che sto avendo è che per qualche motivo quando restituisco un ValidationResult dalla mia classe di attributo di convalida personalizzata non è gestito allo stesso modo di altri attributi di convalida sull'interfaccia utente del client. Invece di mostrare l'errore, non fa nulla. Tuttavia, convaliderà correttamente l'oggetto, ma non mostrerà il risultato della convalida non riuscita.
Di seguito è riportato il codice per una delle mie classi di convalida personalizzate.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.ComponentModel.DataAnnotations;
namespace Project.Web.DataLayer.ValidationAttributes
{
[AttributeUsage(AttributeTargets.Property | AttributeTargets.Field, AllowMultiple = false)]
public class DisallowedChars : ValidationAttribute
{
public string DisallowedCharacters
{
get
{
return new string(this.disallowedCharacters);
}
set
{
this.disallowedCharacters = (!this.CaseSensitive ? value.ToLower().ToCharArray() : value.ToCharArray());
}
}
private char[] disallowedCharacters = null;
private bool caseSensitive;
public bool CaseSensitive
{
get
{
return this.caseSensitive;
}
set
{
this.caseSensitive = value;
}
}
protected override ValidationResult IsValid(object value, ValidationContext validationContext)
{
if (value != null && this.disallowedCharacters.Count() > 0)
{
string Value = value.ToString();
foreach(char val in this.disallowedCharacters)
{
if ((!this.CaseSensitive && Value.ToLower().Contains(val)) || Value.Contains(val))
{
return new ValidationResult(string.Format(this.ErrorMessage != null ? this.ErrorMessage : "'{0}' is not allowed an allowed character.", val.ToString()));
}
}
}
return ValidationResult.Success;
}
}
}
Ecco come lo uso sopra le mie Proprietà sia sul server che sul client.
[DisallowedChars(DisallowedCharacters = "=")]
E ho provato diversi modi di impostare l'associazione.
{Binding Value, NotifyOnValidationError=True}
Così come
{Binding Value, NotifyOnValidationError=True, ValidatesOnDataErrors=True, ValidatesOnExceptions=True, ValidatesOnNotifyDataErrors=True}
Nessuno di questi sembra fare le forme che sono soggetti anche convalidare le voci. Ho provato a utilizzare questo attributo su valori associati a TextBoxes, XamGrids e nessuno di quelli correttamente convalidati come dovrebbero.
Questo problema sembra essere solo quando sto tentando di utilizzare ValidationResult sul lato server. Se utilizzo il risultato della convalida su un valore nel mio modello di vista, verrà validato correttamente. Ho bisogno di trovare un modo per farlo correttamente convalidare dal codice generato però.
Ogni pensiero sarebbe molto apprezzato.
Grazie mille. Questo ha risolto il mio problema. –