我有一个 UserControl,它使用 UserControl 以及其他控件。
In the ascx
文件我有以下代码:
<%@ Register TagPrefix="tag" Namespace="some.name.space" Assembly="some.assembly" %>
<tag:control ID="test" runat="server" />
In my Page_Load
方法,我尝试在测试上设置一个属性,如下所示:
test.Text = "Hello World!";
这实际上设置了我的用户控件中文字控件的 Text 属性test
.
这会引发异常:
你调用的对象是空的
当它尝试设置
lblTest.Text = value;
为 null 的对象是lblTest
.
我没有正确添加用户控件吗?我应该 - 或者我必须 - 指定Src
注册标签时的属性?如果是这样,我必须注册我使用的每个用户控件?
这也会导致用户控件中没有加载任何控件,并且用户控件中的所有控件均为空。
如果用户控件在您当前的项目中,那么您需要在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 中得到一个具有新名称的控件,但在设计器文件中会得到一个对具有旧名称的控件的引用。在运行时,这将导致设计器文件属性为空。
在被这个问题困扰多次之后,如果我在源视图中进行任何更改,我要么检查设计器文件是否已正确更新,要么切换到设计视图,进行细微更改,然后保存页面/用户控制。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)