15 Stimmen

Asp.net Usercontrol LoadControl Problem

Ich habe ein Problem bei der Verwendung von LoadControl( type, Params ) . Lassen Sie mich erklären ...

Ich habe eine super einfache Benutzersteuerung (ascx)

<%@ Control Language="C#" AutoEventWireup="True" Inherits="ErrorDisplay" Codebehind="ErrorDisplay.ascx.cs" EnableViewState="false" %>

<asp:Label runat="server" ID="lblTitle" />
<asp:Label runat="server" ID="lblDescription" />

mit Code ( c# ) dahinter:

public partial class ErrorDisplay : System.Web.UI.UserControl
{

    private Message _ErrorMessage;    

    public ErrorDisplay()
    {
    }

    public ErrorDisplay(Message ErrorMessage)
    {
        _ErrorMessage = ErrorMessage;
    }    

    protected override void OnPreRender(EventArgs e)
    {
        base.OnPreRender(e);

        if (_ErrorMessage != null)
        {
            lblTitle.Text = _ErrorMessage.Message;
            lblDescription.Text = _ErrorMessage.Description;
        }
    }
}

An anderer Stelle in meiner Webanwendung füge ich mit dem folgenden Code eine Instanz des Benutzerkontrolls zur Seite hinzu:

divValidationIssues.Controls.Add(LoadControl(typeof(ErrorDisplay), new object[] { MessageDetails }));   

Ich verwende die überladene Version von LoadControl, weil ich den Parameter Message an den Konstruktor übergeben möchte. All dies erscheint gut zu funktionieren.

Wenn jedoch die OnPreRender() auf dem ErrorDisplay-Benutzerelement ausgelöst wird, sind die Variablen lblTitle und lblDescription beide null obwohl sie ein Äquivalent für den Aufschlag haben. Die Nachrichtenvariable wurde korrekt ausgefüllt.

Kann mir jemand sagen, woran das liegen könnte?

Merci

EDIT :

Der Klarheit halber füge ich noch hinzu, dass der Code, der das Benutzerelement programmatisch zur Seite hinzufügt, als Reaktion auf einen Tastendruck ausgeführt wird, so dass die "Hosting-Seite" Init und Page_Load durchlaufen hat und nun die Event-Handler verarbeitet.

Ich kann die Benutzerkontrollen nicht in einer früheren Phase des Asp-Lebenszyklus hinzufügen, da sie als Reaktion auf ein Schaltflächenklickereignis erstellt werden.

-1voto

Mitchel Sellers Punkte 60318

Gemäß dem asp.net-Seitenlebenszyklus sind Ihre Steuerelemente nicht vollständig im Pre-Renderer hinzugefügt, warum laden Sie nicht einfach die Werte in page_load?

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X