我有一个基本的用户控件(WC1),它继承自WebUserControl和从WC1继承的子用户控件(WC2)。我在vs设计视图中添加了一个文本框和一个标签给WC1,而不是代码隐藏。 但我放入WC1的所有服务器控件都是空的,并给出空指针异常。我尝试访问不同事件中的文本框和标签,但它们全部为空。asp.net UserControl继承,基本用户控件中的Web控件是空指针
有人知道这里出了什么问题吗?谢谢。
步骤来重现错误:
- 创建的名为WC1 web用户控制VS 添加新项
- 加入VS的设计视图中的文本框和标签服务器控件WC1和放码后面:var value = txetBox.Text;
- 创建的名为WC2另一个Web用户控件在VS添加一个新的项目并改变其基类WC1在后面
- 其代码在VS和阻力WC2添加新项目的设计视图中创建一个网页页面
- 运行页面,那么你将看到异常的代码隐藏在WC1
代码:
WC1:
code behind:
public partial class WC1: System.Web.UI.UserControl
{
protected void Page_Load(object sender, EventArgs e)
{
}
}
页:
<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="WC1.ascx.cs" Inherits="WebApplication1.WC1" %>
<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
WC2: 后面的代码:
public partial class WC2: WC1
{ var txt = TextBox1.Text}
页:
<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="WC2.ascx.cs" Inherits="WebApplication1.WC2" %>
综上所述,我的问题:
WC1的可以通过Web服务器控件是在这种情况下实例化?或者是否可以将用户控件从其他用户控件继承,并将父级用户控件的Web服务器控件传递给其子项,而不必担心布局?
好吧,我已经测试过,如果我不添加控件在WC1代码隐藏,它将永远不会被实例化。
需要更多信息。你是否将控件声明式添加到ASCX文件或在代码隐藏文件中创建它们?你如何将用户控件添加到页面?一些代码示例也会有帮助。 – 2010-03-01 00:09:09