使用<%@ Register NameSpace%>加载用户控件不会加载用户控件.ascx文件,而是加载.ascx.cs文件

时间:2010-12-09 16:38:41

标签: asp.net

我正在尝试从另一个项目加载用户控件,我喜欢用它的名称空间来实现:

<%@ Register TagPrefix="IPGostar" Namespace="IPGostarPorject" Assembly="IPGostarPorject" %>

但是当我使用这个服务器标签时这样:

<IPGostar:DataGrid runat="server" ID="DataGrid1"></IPGostar:DataGrid>

将加载DataGrid.ascx.cs的Page_Load,但不会加载ascx文件的内容。 这就像这个标签只调用cs文件而不是首先调用ascx文件..

在这种情况下,是否可以在.cs文件中加载.ascx用户控制文件? (例如我们在Page_Load函数上渲染ascx文件)如果可以的话我该怎么做? 我是在第二个错误的道路吗?

2 个答案:

答案 0 :(得分:1)

将寄存器标记修改为

<%@ Register TagPrefix="IPGostar" TagName="IPGostar" Src="DataGrid.ascx" %>

如果您使用的是用户控件,则必须指定源文件。您的语法适用于自定义控件。

答案 1 :(得分:0)

您需要查看使用Page.LoadControl()加载控件。

在运行时,ascx继承自ascx.cs中定义的类。它们不是同一件事。 ascx中定义的控件是ascx.cs中的子类。

如果要将控件完全分发为二进制文件,则需要将其重写为ServerControl而不是带有ascx的UserControl。

您无法在后面的代码中从类的Page_Load渲染ASCX。这不会影响你的想法。