Hinzufügen von Laufzeit-Fehlermeldungen zu Validierung
Eine der Anforderungen beim Schreiben von dieser Site war die Fähigkeit, Modell Objekt Einschränkungen in OCL und überprüfen dann die aktuelle Seite gegen diese Einschränkungen.
Das Problem mit normalen Bestätigungen ist, dass sie entworfen sind, um eine Liste der Einschränkungen für ein Objekt, anstatt einzelne Steuerelemente zu überprüfen. Der Ansatz, den ich nahm war einen Validator zu erstellen, die ich Stelle auf jeder Webformular und fügen Sie so viele Fehler wie ich benötigt, können.
Der erste Schritt war ein WebControl zu erstellen, die IValidator unterstützt
publicclass MultiValidator: WebControl, IValidator
{
}
Ich habe dann eine ArrayList Fehlerzeichenfolgen und eine Methode einen Fehler hinzufügen zu halten.
Private ArrayList Störungen = new ArrayList();
public void AddError (int i)
{
Errors.Add(message);
} //AddError
Wenn ASP-NET eine Seite überprüft es listet alle IValidators innerhalb seiner eigenen Validators-Eigenschaft und IValidator.Validate() genannt. Um festzustellen, ob die Seite gültig ist, überprüft er dann IValidator.IsValid.
Um benutzerdefinierte Fehlermeldungen zur Laufzeit hinzuzufügen habe ich beschlossen, eine statische Validator-Klasse zu erstellen, die aus IsValidator.IsValid immer 'false' zurückgegeben. Für jede Fehlermeldung in meinem MultiValidator konnte ich dann einfach eine Instanz eines diese Bestätigungen erstellen.
[ToolboxItem(false)]
internalclass StaticValidator: IValidator
{
private String ErrorMessage;
#region IValidator
void IValidator.Validate()
{
} //Validate
Bool IValidator.IsValid
{
Get {returnfalse;}
Set {}
} //IsValid
#endregion
publicstring ErrorMessage
{
erhalten Sie {ErrorMessage return;}
Set {ErrorMessage = Value;}
} //ErrorMessage
}
Nun, da der StaticValidator geschrieben wurde, alles, was ich tun musste, war meine MultiValidator Klasse die erforderlichen IValidator-Implementierungen hinzu.
#region IValidator
void IValidator.Validate()
{
IsValid = (Errors.Count == 0);
Foreach (String Fehler in Errors)
{
StaticValidator Validator = neue StaticValidator();
Validator. ErrorMessage = Fehler;
Page.Validators.Add(validator);
Validators.Add(validator);
} //foreach Störungen
} //Validate
Bool IValidator.IsValid
{
Get {return IsValid;}
Set {IsValid = Value;}
} //IsValid
#endregion
Jetzt würde ich in ein Webformular
- Setzen Sie 'CausesValidation' auf False auf meine Schaltfläche Absenden.
- Mein Objekt validieren
- Rufen Sie MultiValidator1.AddError() für jeden Fehler aufgetreten
- Aufruf Page.Validate()
- Page.IsValid als normal zu überprüfen
Mit einem ValidationSummary konnte ich dann die gebrochenen Einschränkungen dem Benutzer zur Berichtigung anzeigen. Der gesamten Quellcode wird nachstehend aufgeführt...
MultiValidator.cs
using System;
using System.Collections;
using System.ComponentModel;
verwenden System.Web.UI;
verwenden System.Web.UI.WebControls;
Namespace DroopyEyes.Web.Controls
{
publicclass MultiValidator: WebControl, IValidator
{
#region Mitglieder
private Bool IsValid = True;
private String ErrorMessage = '';
Private ArrayList Störungen = new ArrayList();
Private ArrayList-Validators = new ArrayList();
#endregion
#region IValidator
void IValidator.Validate()
{
IsValid = (Errors.Count == 0);
Foreach (String Fehler in Errors)
{
StaticValidator Validator = neue StaticValidator();
Validator. ErrorMessage = Fehler;
Page.Validators.Add(validator);
Validators.Add(validator);
} //foreach Störungen
} //Validate
Bool IValidator.IsValid
{
Get {return IsValid;}
Set {IsValid = Value;}
} //IsValid
#endregion
Writer protected Override void OnInit (EventArgse)
{
Base. OnInit(e);
Page.Validators.Add(this);
}
protectedoverridevoid OnUnload (EventArgse)
{
Wenn (Page! = Null)
{
Page.Validators.Remove(this);
Foreach (IValidator Bestätigung in Validators)
Page.Validators.Remove(validator);
} //Page! = Null
Base. OnUnload(e);
}
public void AddError (int i)
{
Errors.Add(message);
} //AddError
#region Eigenschaften
[Bindable(true)]
[Category('Appearance')]
[DefaultValue('')]
publicstring ErrorMessage
{
erhalten Sie {ErrorMessage return;}
Set {ErrorMessage = Value;}
} //ErrorMessage
#endregion
}
}
StaticValidator.cs
using System;
using System.ComponentModel;
verwenden System.Web.UI;
Namespace DroopyEyes.Web.Controls
{
[ToolboxItem(false)]
internalclass StaticValidator: IValidator
{
private String ErrorMessage;
#region IValidator
void IValidator.Validate()
{
System.Diagnostics.Trace.WriteLine('StaticValidator.Validate()');
} //Validate
Bool IValidator.IsValid
{
Get {returnfalse;}
Set {}
} //IsValid
#endregion
publicstring ErrorMessage
{
erhalten Sie {ErrorMessage return;}
Set {ErrorMessage = Value;}
} //ErrorMessage
}
}
Hinzufügen von Laufzeit-Fehlermeldungen zu Validierung
Hinzufügen von Laufzeit-Fehlermeldungen zu Validierung : Mehreren tausend Tipps, um Ihr Leben einfacher machen.
Eine der Anforderungen beim Schreiben von dieser Site war die Fähigkeit, Modell Objekt Einschränkungen in OCL und überprüfen dann die aktuelle Seite gegen diese Einschränkungen.
Das Problem mit normalen Bestätigungen ist, dass sie entworfen sind, um eine Liste der Einschränkungen für ein Objekt, anstatt einzelne Steuerelemente zu überprüfen. Der Ansatz, den ich nahm war einen Validator zu erstellen, die ich Stelle auf jeder Webformular und fügen Sie so viele Fehler wie ich benötigt, können.
Der erste Schritt war ein WebControl zu erstellen, die IValidator unterstützt
publicclass MultiValidator: WebControl, IValidator
{
}
Ich habe dann eine ArrayList Fehlerzeichenfolgen und eine Methode einen Fehler hinzufügen zu halten.
Private ArrayList Störungen = new ArrayList();
public void AddError (int i)
{
Errors.Add(message);
} //AddError
Wenn ASP-NET eine Seite überprüft es listet alle IValidators innerhalb seiner eigenen Validators-Eigenschaft und IValidator.Validate() genannt. Um festzustellen, ob die Seite gültig ist, überprüft er dann IValidator.IsValid.
Um benutzerdefinierte Fehlermeldungen zur Laufzeit hinzuzufügen habe ich beschlossen, eine statische Validator-Klasse zu erstellen, die aus IsValidator.IsValid immer 'false' zurückgegeben. Für jede Fehlermeldung in meinem MultiValidator konnte ich dann einfach eine Instanz eines diese Bestätigungen erstellen.
[ToolboxItem(false)]
internalclass StaticValidator: IValidator
{
private String ErrorMessage;
#region IValidator
void IValidator.Validate()
{
} //Validate
Bool IValidator.IsValid
{
Get {returnfalse;}
Set {}
} //IsValid
#endregion
publicstring ErrorMessage
{
erhalten Sie {ErrorMessage return;}
Set {ErrorMessage = Value;}
} //ErrorMessage
}
Nun, da der StaticValidator geschrieben wurde, alles, was ich tun musste, war meine MultiValidator Klasse die erforderlichen IValidator-Implementierungen hinzu.
#region IValidator
void IValidator.Validate()
{
IsValid = (Errors.Count == 0);
Foreach (String Fehler in Errors)
{
StaticValidator Validator = neue StaticValidator();
Validator. ErrorMessage = Fehler;
Page.Validators.Add(validator);
Validators.Add(validator);
} //foreach Störungen
} //Validate
Bool IValidator.IsValid
{
Get {return IsValid;}
Set {IsValid = Value;}
} //IsValid
#endregion
Jetzt würde ich in ein Webformular
- Setzen Sie 'CausesValidation' auf False auf meine Schaltfläche Absenden.
- Mein Objekt validieren
- Rufen Sie MultiValidator1.AddError() für jeden Fehler aufgetreten
- Aufruf Page.Validate()
- Page.IsValid als normal zu überprüfen
Mit einem ValidationSummary konnte ich dann die gebrochenen Einschränkungen dem Benutzer zur Berichtigung anzeigen. Der gesamten Quellcode wird nachstehend aufgeführt...
MultiValidator.cs
using System;
using System.Collections;
using System.ComponentModel;
verwenden System.Web.UI;
verwenden System.Web.UI.WebControls;
Namespace DroopyEyes.Web.Controls
{
publicclass MultiValidator: WebControl, IValidator
{
#region Mitglieder
private Bool IsValid = True;
private String ErrorMessage = '';
Private ArrayList Störungen = new ArrayList();
Private ArrayList-Validators = new ArrayList();
#endregion
#region IValidator
void IValidator.Validate()
{
IsValid = (Errors.Count == 0);
Foreach (String Fehler in Errors)
{
StaticValidator Validator = neue StaticValidator();
Validator. ErrorMessage = Fehler;
Page.Validators.Add(validator);
Validators.Add(validator);
} //foreach Störungen
} //Validate
Bool IValidator.IsValid
{
Get {return IsValid;}
Set {IsValid = Value;}
} //IsValid
#endregion
Writer protected Override void OnInit (EventArgse)
{
Base. OnInit(e);
Page.Validators.Add(this);
}
protectedoverridevoid OnUnload (EventArgse)
{
Wenn (Page! = Null)
{
Page.Validators.Remove(this);
Foreach (IValidator Bestätigung in Validators)
Page.Validators.Remove(validator);
} //Page! = Null
Base. OnUnload(e);
}
public void AddError (int i)
{
Errors.Add(message);
} //AddError
#region Eigenschaften
[Bindable(true)]
[Category('Appearance')]
[DefaultValue('')]
publicstring ErrorMessage
{
erhalten Sie {ErrorMessage return;}
Set {ErrorMessage = Value;}
} //ErrorMessage
#endregion
}
}
StaticValidator.cs
using System;
using System.ComponentModel;
verwenden System.Web.UI;
Namespace DroopyEyes.Web.Controls
{
[ToolboxItem(false)]
internalclass StaticValidator: IValidator
{
private String ErrorMessage;
#region IValidator
void IValidator.Validate()
{
System.Diagnostics.Trace.WriteLine('StaticValidator.Validate()');
} //Validate
Bool IValidator.IsValid
{
Get {returnfalse;}
Set {}
} //IsValid
#endregion
publicstring ErrorMessage
{
erhalten Sie {ErrorMessage return;}
Set {ErrorMessage = Value;}
} //ErrorMessage
}
}
Hinzufügen von Laufzeit-Fehlermeldungen zu Validierung
By Wiezutun
Hinzufügen von Laufzeit-Fehlermeldungen zu Validierung : Mehreren tausend Tipps, um Ihr Leben einfacher machen.