2009-07-14 2 views
1

Ich habe eine .aspx Seite, die drei separate .ascx Steuerelemente lädt, um das Hinzufügen, Bearbeiten und Auflisten von Objekten darzustellen. Es schaltet derzeit einfach die Sichtbarkeit aus und aktiviert/deaktiviert die Steuerelemente, um zwischen den Seiten zu wechseln.Kann ein Web-Steuerelement Eigenschaften bearbeiten, die zu seinem übergeordneten Element gehören?

Wenn Sie jedoch Objekte (in einer Gitteransicht) auflisten, bieten wir neben jedem die grundlegende Schaltfläche "Bearbeiten" an. Wenn Sie darauf klicken, wird das Bearbeitungssteuerelement für diesen Benutzer natürlich geladen. Diese Funktionalität befindet sich innerhalb des Steuerelements und nicht auf der übergeordneten Seite.

Ist es möglich, Attribute für das übergeordnete Element basierend auf Ereignissen in einem untergeordneten Steuerelement zu ändern? (Ändern Sie beispielsweise die Sichtbarkeit und aktivieren/deaktivieren Sie die anderen untergeordneten Steuerelemente.)

Antwort

2

Ja, Sie können. Wir machen das erfolgreich in unserem C# -Projekt; Ich denke, das gleiche gilt für vb.net.

Jedes Benutzersteuerelement hat eine Eigenschaft namens Page, die sich auf die Seite bezieht, unter der es gehostet wird. Erstellen Sie eine Schnittstelle, die die Eigenschaften anzeigt, die Sie ändern möchten, oder Methoden, die Sie aufrufen möchten. Lassen Sie jede Seite, die das Benutzersteuerelement hostet, diese Schnittstelle implementieren. Die Implementierung sollte sich natürlich auf die korrekte (n) Kontrolle (n) auf der Seite auswirken.

Geben Sie dann die Page-Eigenschaft an diese Schnittstelle und geben Sie Ihre Eigenschaft (en) an.
Zum Beispiel (auch hier ist die C#, nicht sicher, was die VB.Net entspricht):

interface IUpdatePage { 
    void ChangeButton(String toValue); 
} 

public class MyPage : Page, IUpdatePage { 
    public void ChangeButton(String toValue) { 
     // do something interesting 
    } 
} 

public class MyUserControl : UserControl { 
    public void UpdateParent() { 
     var pageLink = (Page as IUpdatePage); 
     pageLink.ChangeButton("some value"); 
    } 
} 
+0

Sehr interessant, ich überprüfe das! – Chris

+0

Hinweis, dies ist offensichtlich alle Server-Seite. Robert Harvey scheint eine Lösung für die Kundenseite zu haben. – NotMe

+0

Ich konnte keine Elemente der Page-Klasse finden, um dies zu erreichen. Kommen Sie zufällig auf die Parent-Klasse der Page-Klasse zu? – Chris

0

Dies kann im Browser mithilfe von JavaScript oder JQuery erfolgen.

CodeBehind-Ereignisse werden normalerweise in die Warteschlange gestellt/verzögert, bis ein Postback auftritt, es sei denn, Sie verwenden Ajax. Wenn Sie Ajax verwenden, können Sie den Teil Ihres Formulars, für den Sichtbarkeitsänderungen erforderlich sind, erneut rendern.

+0

Dies könnte nützlich sein! Ich werde das testen. – Chris

0

Ich glaube nicht, dass ich Ihren Fluss verstehe. Was genau passiert, wenn Sie auf die Bearbeitungsschaltfläche im Grid klicken? Ihr ItemCommand-Ereignis wird ausgelöst, und Sie finden entweder das Bearbeitungssteuerelement und machen es sichtbar, oder Sie laden es und machen es sichtbar. Ist das korrekt?

Unter welchen Umständen möchte das Bearbeitungssteuerelement dann die Eigenschaften seines übergeordneten Elements ändern?

+0

Wenn ich auf die Bearbeitungsschaltfläche in meinem Raster klicke, wird die ID dieser Zeile gespeichert, die Sichtbarkeit deaktiviert und auf dem Steuerelement list.ascx auf false gesetzt, dann wird edit.ascx mit den Informationen aus der Zeilen-ID aktiviert/sichtbar gemacht. – Chris

Verwandte Themen