Frage

Ich baue eine Anwendung, bei der eine Seite wird Bedienelemente (x.ascx) dynamisch basierend auf Query-String laden.

Ich habe eine Validierung Zusammenfassung auf der Seite und will es von den Benutzereinstellungen aktualisieren. Dies ermöglicht es mir mehrere Steuerelemente mit einer Validierung Zusammenfassung zu haben. Wie kann ich die Datenübertragung zwischen Steuerungen und Seiten.

Ich weiß, ich kann das Steuerelement zur Entwurfszeit definieren und Veranstaltungen, das zu tun verwenden, aber diese Kontrollen werden dynamisch mit Page.LoadControl geladen.

Auch möchte ich mit Sitzungen oder Abfragezeichenfolgeflag vermeiden.

War es hilfreich?

Lösung

hat einen Weg gefunden, dies zu tun:

Schritt 1: Erstellen einer Basis User Control und definieren Delegierten und Ereignisse in dieser Steuerung

.

Schritt 2: Erstellen Sie eine öffentliche Funktion in der Steuerbasis Benutzer Ereignisse in Schritt 1 definierten Raise

.
'SourceCode for Step 1 and Step 2
Public Delegate Sub UpdatePageHeaderHandler(ByVal PageHeading As String)
Public Class CommonUserControl
    Inherits System.Web.UI.UserControl

    Public Event UpdatePageHeaderEvent As UpdatePageHeaderHandler
    Public Sub UpdatePageHeader(ByVal PageHeadinga As String)
        RaiseEvent UpdatePageHeaderEvent(PageHeadinga)
    End Sub
End Class

Schritt 3:. Inherit Ihre Web User Control von der Basis Benutzersteuerung, die Sie in Schritt 1 erstellt

Schritt 4:. Von Ihrem Web User Control - Rufen Sie den MyBase.FunctionName, die Sie in Schritt 2 definiert

'SourceCode for Step 3 and Step 4
Partial Class DerievedUserControl
    Inherits CommonUserControl

    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        MyBase.PageHeader("Test Header")
    End Sub
End Class

Schritt 5:. In Ihrer Seite, die Steuerung lädt dynamisch Page.LoadControl mit und die Steuerung als die Basisbenutzersteuerung Cast

Schritt 6:. Bringen Sie Event-Handler mit dieser Regelung

'SourceCode for Step 5 and Step 6
Private Sub LoadDynamicControl()
    Try
        'Try to load control
        Dim c As CommonUserControl = CType(LoadControl("/Common/Controls/Test.ascx", CommonUserControl))
        'Attach Event Handlers to the LoadedControl
        AddHandler c.UpdatePageHeaderEvent, AddressOf PageHeaders
        DynamicControlPlaceHolder.Controls.Add(c)
    Catch ex As Exception
        'Log Error
    End Try
End Sub

Andere Tipps

Sie sprechen asp die Validierungssteuer Unter der Annahme, so dass sie mit der Validierung Zusammenfassung funktionieren sollen einfach sein: die gleiche Validation-Gruppe verwenden. Normalerweise leite ich alle Benutzersteuerelemente von einer Basisklasse, die eine Validation Eigenschaft, deren Setter fügt ruft eine überschriebene Methode, die alle internen Prüfer auf die gleiche Validierungsgruppe ändert.

Der schwierige Teil ist, so dass sie sich verhalten, wenn dynamisch hinzugefügt. Es gibt einige Fallstricke Sie sollten sich bewusst sein, vor allem die Seite Zyklus betreffend, und wenn Sie sie zu Ihren Page-Objekt hinzuzufügen. Wenn Sie alle möglichen Bedienelemente kennen werden Sie während der Entwurfszeit verwenden, würde ich versuchen, sie zu addieren statisch mit EnableViewState und Visible-Overhead zu minimieren, auch wenn es zu viele von ihnen sind.

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