如何从另一个UserControl继承UserControl?

时间:2022-12-15 16:54:02

Is it possible to inherit a User control from another user control?

是否可以从另一个用户控件继承用户控件?

The thing I'm trying to achieve is a user control inheriting from another user control. So I have baseusercontrol.ascx, and this just has text "Stuff". Then I have another user control, childusercontrol.ascx inheriting off of baseusercontrol.ascx. If I don't change anything in childusercontrol.ascx, I would expect the baseusercontrol.ascx text to display of "Stuff".

我想要实现的是从另一个用户控件继承的用户控件。所以我有baseusercontrol.ascx,这只是文本“Stuff”。然后我有另一个用户控件,childusercontrol.ascx继承baseusercontrol.ascx。如果我没有在childusercontrol.ascx中更改任何内容,我希望baseusercontrol.ascx文本显示“Stuff”。

And also I should be able to extend the base user control functionalities in derived one.

而且我应该能够在派生的功能中扩展基本用户控制功能。

I have also tried something like this, but its not enough in my case.

我也试过这样的东西,但在我的情况下还不够。

Now my childusercontrol.ascx looks lie below

现在我的childusercontrol.ascx看起来在下面

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

childusercontrol.ascx.cs as below

childusercontrol.ascx.cs如下

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

    }   
}

When I browse this page Im getting error as

当我浏览此页面时,我得到错误

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 clue?

任何线索?

1 个解决方案

#1


3  

I have tested this situation for myself. Actually you can not inherit from a base class that is a UserControl with it's own ASCX code.

我亲自测试了这种情况。实际上,您不能从具有自己的ASCX代码的UserControl的基类继承。

What you can do however, is implementing some basic functionality in a (possibly abstract) base class (without ASCX) like this:

但是你可以做的是在(可能是抽象的)基类(没有ASCX)中实现一些基本功能,如下所示:

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

And then use the methods and properties of this base class in concrete UserControl classes that have their own ASCX file.

然后在具有自己的ASCX文件的具体UserControl类中使用此基类的方法和属性。

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; }
    }
}

#1


3  

I have tested this situation for myself. Actually you can not inherit from a base class that is a UserControl with it's own ASCX code.

我亲自测试了这种情况。实际上,您不能从具有自己的ASCX代码的UserControl的基类继承。

What you can do however, is implementing some basic functionality in a (possibly abstract) base class (without ASCX) like this:

但是你可以做的是在(可能是抽象的)基类(没有ASCX)中实现一些基本功能,如下所示:

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

And then use the methods and properties of this base class in concrete UserControl classes that have their own ASCX file.

然后在具有自己的ASCX文件的具体UserControl类中使用此基类的方法和属性。

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; }
    }
}