Der beste Weg gesetzt Validation Eigenschaft jedes Steuerelements in einer asp.net global?

StackOverflow https://stackoverflow.com/questions/1424577

  •  07-07-2019
  •  | 
  •  

Frage

Ich habe einen User Control mit Formularelementen, die wiederverwendet wird deutlich in einer großen Web-Anwendung, und bis zu diesem Zeitpunkt der Validierung Zusammenfassung auf eine ungültige Formulareinreichung wird durch die ASPX, die die User Control verbraucht behandelt werden.

Jetzt muss ich für jedes meiner Formularelemente steuert die Validation Eigenschaft zur Laufzeit festgelegt (Textfelder, Listen, Validierer, etc). Anstatt es manuell tun, indem jede Steuerungseinstellung ich interessiert bin in Iterieren durch alle Steuerelemente in der Benutzerkontrolle, Erkennen, ob die Steuerung eine Validation Eigenschaft hat, und wenn er den Wert auf diese Weise.

So etwas wie folgt aus:

For Each ctrl As System.Web.UI.Control In Me.Controls
   ' so now what is the proper way to detect if this control has the ValidationGroup property
Next

Codebeispiel in vb.net oder c # funktioniert für mich. Vielen Dank!

War es hilfreich?

Lösung

Ihr Usercontrol sollte eine Eigenschaft, dass sich die Validation Eigenschaft richtig in mich selbst setzt.

Kontroll Markup in .ASPX:

<ctl:yourcontrol id="whatever" runat="server" YourValidationGroupProp="HappyValidationName" />

Control Code-behind .ascx:

 protected override void OnPreRender(EventArgs e)
 {
     someControl.ValidationGroup = YourValidationGroupProp;
     someControl1.ValidationGroup = YourValidationGroupProp;
     someControl2.ValidationGroup = YourValidationGroupProp;
     //......etc
 }    

 public string YourValidationGroupProp{ get; set; }

Andere Tipps

Erstellen Sie eine benutzerdefinierte Steuerung inheriting zum Beispiel wörtlich zu nehmen. Diese Steuerung wird ein Helfer sein.

Sie werden es in einer Seite einfügen, hat es für Sie all die schmutzige Arbeit tun. z.B. Ausgangscode auf einem gewissen Logik [die viel Zeit in Anspruch nehmen würde, schreiben] basiert, und wenn Sie damit fertig sind.

Holen Sie sich die automatische Code (das schwere Gewicht haben würde, dass tatsächlich jedes Mal durch eine andere Steuerung erfolgt), entfernen Sie die Helfer Kontrolle und Festcode-Platz den neuen Code, wo immer Sie wollen.

Auf diese Weise vermeiden Sie alle Fehler durch den Computer Figur mit aus dem Code wollen Sie als Wunsch und Sie alle hartcodierte Geschwindigkeit gewinnen, die durch die Lösung des Problems mit generischen Verfahren leiden würde.

Ich war gerade auf der Suche nach der gleichen Sache, und es fiel mir plötzlich. Ich benutze diese Methode für andere Dinge [alle Steuerelemente scannen und Ausgabe einige init code] aber ich denke, es diese Methode einfach diese nutzen könnten, um zu tun, wie gut!

Ich schrieb es einfach und ich werde es mit Ihnen teilen

public class ValidationCodeProducerHelper : Literal
{
    // you can set this in the aspx/ascx as a control property
    public string MyValidationGroup { get; set; }

    // get last minute controls
    protected override void OnPreRender(EventArgs e)
    {
        base.OnPreRender(e);

        // start scanning from page subcontrols
        ControlCollection _collection = Page.Controls;
        Text = GetCode(_collection).Replace("\r\n", "<br/>");
    }

    private string GetCode(Control _control)
    {
        // building helper
        StringBuilder _output = new StringBuilder();

        // the logic of scanning
        if (_control.GetType().GetProperty("ValidationGroup") != null && !string.IsNullOrEmpty(_control.ID))
        {
            // the desired code
            _output.AppendFormat("{0}.{1} = {2};", _control.ID, "ValidationGroup", MyValidationGroup);
            _output.AppendLine();
        }

        // recursive search within children
        _output.Append(GetCode(_control.Controls));

        // outputting
        return _output.ToString();
    }

    private string GetCode(ControlCollection _collection)
    {
        // building helper
        StringBuilder _output = new StringBuilder();
        foreach (Control _control in _collection)
        {
            // get code for each child
            _output.Append(GetCode(_control));
        }
        // outputting
        return _output.ToString();
    }
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top