2013-10-07 240 views
5

是否有可能从其他用户控件继承用户控件?如何从其他UserControl继承UserControl?

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

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

我也试过类似this的东西,但是对我来说还不够。

现在我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如下

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

    } 
} 

当我浏览这个网页即时得到错误的

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. 

任何线索?

+0

你能分享baseusercontrol.ascx的代码吗?您的错误表示您在特定行号处有空引用。我怀疑你有一个空引用。 o_O –

+0

您需要查看堆栈跟踪,就像异常消息告诉您的一样。几乎所有的'NullReferenceException'都是一样的。请参阅“[什么是.NET一个NullReferenceException?](http://stackoverflow.com/questions/4660142/what-is-a-nullreferenceexception-in-net)”获得一些提示。 –

+1

另外,不,用户控件并不意味着被继承。你可以做的最好的是创建继承'UserControl'的基类,但不包含任何标记(没有.ascx文件)。 –

回答

3

我已经为自己测试了这种情况。其实你不能从一个基类UserControl继承与它自己的ASCX代码。

但是你可以做什么,是实现的(可能是抽象)基类中的一些基本功能(不ASCX)是这样的:

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

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

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; } 
    } 
} 
相关问题