Frage

Ich habe eine asp.net Seite mit einem Knopf. Diese Schaltfläche erzeugt und fügt eine Benutzersteuerung in der Seite, so viele Steuerelemente auf einer Seite existieren könnten. Ich muss bestätigen, dass eine bestimmte dynamisch generierte Steuer innerhalb des erzeugten Steuer existiert.

So..Page hat 0 bis N Control1 ist. Jede Steuerung 1 kann 0 bis N Control2 des haben. Wenn Savebutton auf Seite geklickt wird, muss ich sicherstellen, dass es mindestens 1 Control2 der Innenseite jeder Control1 sind.

Ich bin zur Zeit zwischen zwei Möglichkeiten:

• Dynamisch einfügen CustomValidators für jede Steuerung, die erzeugt wird, von denen jede ein Control1 bestätigen würde.

• Führen Sie die Validierung von Hand (mit jQuery), eine Validierungsfunktion von SaveButton.OnClientClick aufrufen.

Beide sind schlampig in ihren eigenen Weg - das ist, warum ich das teilen bin mit euch allen. Bin ich die einfache Lösung fehlt?

Vielen Dank im Voraus .. (btw - alles bis zu und einschließlich .NET 3.5 SP1 ist fair game)

War es hilfreich?

Lösung

Hmm Ich mag die Schnittstelle Idee von digiguru vorgeschlagen, aber ich würde die Schnittstelle auf den Behälter Control1 anstelle der Untersteuerungen verwenden, da es wie der logische Ort scheint für den Code zu leben. Heres mein nehmen auf sie:

public interface IValidatableControl
{
    bool IsValidControl();    
}

dann implementieren diese auf Ihrem Control1

public class Control1 : IValidatableControl
{
... Other methods
    public bool IsValidControl()
    {

        foreach(object c in this.Controls)
        {
            if(c.GetType() == "Control2")
                return true;
        }
        return false;
    }

}

Es gibt wahrscheinlich bessere Möglichkeiten, dies zu schreiben, aber es sollte Ihnen genug von einer Idee geben, um zu beginnen.

Andere Tipps

Wenn Sie Benutzerkontrollen im laufenden Betrieb hinzufügen, könnten Sie jede Steuerung machen die gleiche Schnittstelle mit einer Validate Funktion implementieren. Auf diese Weise können Sie die Steuerelemente in einen Platzhalter laden in jedem Elternteil Steuerelement auf der Seite. Wenn die Seite gestellt wird, einfach eine Schleife durch die Kontrollen in dem Platzhalter, wirft sie auf die Interface-Klasse und rufen Sie dann die Prüf-Funktion. I keine benutzerdefinierten Validierer verwenden, aber Sie können von der Prüf-Funktion eine Liste der Validierungsfehler mit dem Ziel aufzubauen zurückgegeben, können Sie diese Sammlung von Validierungsfehler machen je nachdem, wie Sie möchten.

Ich glaube, Sie könnte es tun durch eine öffentliche Eigenschaft in Control1 zuweisen, die die Existenz von Control2 die ID verweist, und dann Control1 Klasse mit Validation dekorieren. Ich denke, etwas in diese Richtung:

[ValidationProperty("Control2Ref")]
public partial class Control1 : UserControl
{
    public string Control2Ref
    {
        get { return FindControl("Control2"); }
    }
    // rest of control 1 class
}

Und dann sollten Sie eine RequiredFieldValidator bei einer Instanz von Control1 zeigen können.

Eine Methode, die Sie könnten versuchen, ist die Schaffung und eine einfache XML-Struktur beibehalten, die Ihre individuelle Steuerungshierarchie darstellt. Einfügen oder aus dieser Struktur löschen jederzeit Sie erstellen oder eine Steuer benutzerdefinierte zerstören. Nach speichern, zu validieren, dass die Steuerungshierarchie in der XML-Struktur dargestellt korrekt ist. Sie könnten die xml im Session-Objekt speichern Sie es über Postbacks zu bestehen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top