5

Ist es möglich, ein Benutzersteuerelement von einem anderen Benutzersteuerelement zu erben?Wie erben Sie ein UserControl von einem anderen UserControl?

Die Sache, die ich versuche zu erreichen, ist ein Benutzersteuerelement, das von einem anderen Benutzersteuerelement erbt. Also habe ich baseusercontrol.ascx, und das hat nur den Text "Stuff". Dann habe ich ein anderes Benutzersteuerelement, childusercontrol.ascx, das von baseusercontrol.ascx erbt. Wenn ich in childusercontrol.ascx nichts ändere, würde ich erwarten, dass der baseusercontrol.ascx-Text von "Stuff" angezeigt wird.

Und auch ich sollte in der Lage sein, die Basisbenutzersteuerungsfunktionalitäten in abgeleitetem zu erweitern.

Ich habe auch etwas wie this versucht, aber es ist nicht genug in meinem Fall.

Jetzt sieht mein childusercontrol.ascx liegen unterhalb

<%@ Control Language="C#" AutoEventWireup="true" CodeFile="childusercontrol.ascx.cs" Inherits="test_childusercontrol" %> 
<%@ Register src="baseusercontrol.ascx" tagname="baseusercontrol" tagprefix="uc1" %> 

childusercontrol.ascx.cs wie unten

public partial class test_childusercontrol : baseusercontrol 
{ 
    protected void Page_Load(object sender, EventArgs e) 
    { 

    } 
} 

Wenn ich diese Seite Ich erhalte Fehler

Object reference not set to an instance of an object. 
Description : An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code. 
Exception Details : System.NullReferenceException: Object reference not set to an instance of an object. 

Any als

durchsuchen Hinweis?

+0

Können Sie Code aus dem baseusercontrol.ascx freigeben? Ihr Fehler besagt, dass Sie bei einer bestimmten Zeilennummer eine Nullreferenz haben. Ich vermute, du hast einen Nullbezug. o_O –

+0

Sie sollten sich den Stack-Trace genau ansehen, wie es die Ausnahmebedingung Ihnen mitteilt. Fast alle Fälle von 'NullReferenceException' sind identisch. Für einige Hinweise siehe "[Was ist eine NullReferenceException in .NET?] (Http://stackoverflow.com/questions/4660142/what-is-a-nullreferenceexception-in-net)". –

+1

Nein, Benutzersteuerelemente sollen nicht vererbt werden. Das Beste, was Sie tun können, ist, Basisklassen zu erstellen, die 'UserControl' erben, aber keine Markups enthalten (keine .ascx-Datei). –

Antwort

3

Ich habe diese Situation für mich selbst getestet. Eigentlich können Sie nicht erben von einer Basisklasse, die eine UserControl mit eigenen ASCX-Code ist.

Was man jedoch tun, ist die Umsetzung einige grundlegende Funktionalität in einer (möglicherweise abstrakt) Basisklasse (ohne ASCX) wie folgt aus:

public class BaseClass:UserControl 
{ 
    public String BaseGreeting { get { return "Welcomebase!"; }} 
} 

Und dann die Methoden und Eigenschaften dieser Basisklasse in Beton UserControl Klassen, die ihre eigene ASCX Datei haben.

public partial class childusercontrol : BaseClass 
{ 
    protected override void OnInit(EventArgs e) 
    { 
     base.OnInit(e); 
     Greeting = base.BaseGreeting; //As initial value 
    } 
    public String Greeting 
    { 
     get { return LabelGreeting.Text; } 
     set { LabelGreeting.Text = value; } 
    } 
} 
Verwandte Themen