首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >用户控件中的所有控件均为空

用户控件中的所有控件均为空
EN

Stack Overflow用户
提问于 2011-11-17 07:40:53
回答 4查看 16.1K关注 0票数 23

在其他控件中,我有一个使用UserControl的UserControl。

ascx文件中,我有以下代码:

<%@ Register TagPrefix="tag" Namespace="some.name.space" Assembly="some.assembly" %>
<tag:control ID="test" runat="server" />

在我的Page_Load方法中,我尝试对测试设置一个属性,如下所示:

test.Text = "Hello World!";

这实际上设置了我的用户控件test中的文本控件的Text属性。

这会抛出一个异常:

对象引用未设置为对象的实例

当它尝试将

lblTest.Text = value; 

为null的对象为lblTest

我没有正确添加用户控件吗?在注册标记时,我是否应该-或者必须-指定Src属性?如果是这样,我将不得不注册我使用的每个用户控件?

这也会导致在usercontrol中不加载任何控件,并且usercontrol中的所有控件都为空。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-11-17 09:05:12

如果用户控件位于当前项目中,则需要在register语句中包含src:

<%@ Register TagPrefix="uc1" TagName="NavTop" Src="controls/NavTop.ascx" %>

但是,如果在多个页面中使用此用户控件,则还可以在web.config中注册它:

<system.web>
  <pages>
    <controls>
      <add tagPrefix="uc1" tagName="NavTop" src="~/controls/NavTop.ascx" />
    </controls>
  </pages>
</system.web>

另一件需要注意的事情是:如果您只在源代码视图中进行更改,则visual studio设计器有时不会“看到”您对页面上的控件所做的更改。例如,如果更改控件名称,最终可能会得到一个在ascx中具有新名称的控件,但在设计器文件中引用具有旧名称的控件。在运行时,这将导致设计器文件属性为空。

在经过多次刻录之后,如果我在源代码视图中做了任何更改,我要么检查设计器文件是否已正确更新,要么切换到设计视图,进行一些小更改,然后保存页面/用户控件。

票数 29
EN

Stack Overflow用户

发布于 2018-01-19 23:26:56

当我以错误的方式在代码中添加用户控件时,我遇到了这个问题。您必须使用Page.LoadControl方法来初始化控件,而不能只使用new。

        //WRONG
        UserControls.BingoCardPage bcp = new UserControls.BingoCardPage();
        form1.Controls.Add(bcp);
        //RIGHT
        UserControls.BingoCardPage bcp = (UserControls.BingoCardPage)Page.LoadControl("~/UserControls/BingoCardPage.ascx");
        form1.Controls.Add(bcp);
票数 7
EN

Stack Overflow用户

发布于 2011-11-17 09:28:47

这里的问题通常是由于用户控件的加载机制造成的,它们通常在页面之后加载。因此,在包含page_load方法的过程中,用户控件上的控件尚未初始化(导致null引用)。解决这个问题的一种方法是在usercontrol上创建并设置一个属性,然后让usercontrol在其Page_Load方法中连接/填充它自己的UI。

如下所示:

//Page
protected void Page_Load(object sender, EventArgs e)
{
    test.Text = "Hello World!";
}

//User Control
public string Text {get; set;}

protected void Page_Load(object sender, EventArgs e)
{
    lblTest.Text = Text;
}
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8160319

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档