找不到ASP.net用户控件的命名空间名称

找不到ASP.net用户控件的命名空间名称,asp.net,user-controls,Asp.net,User Controls,所以我在发布网站时遇到了问题。 我在VisualStudio2008SP1中 我有一堆用户控件,在一些页面上我以编程的方式使用它们 我在aspx页面上有一个参考资料 <%@ Reference Control="~/UserControls/Foo.ascx" %> 如果我导航到该页面,它可以正常工作,但是当我发布网站时,我得到了一个编译时错误。Argh,我在这个问题上花费了大量的开发时间。有人能解决这个问题吗 顺便说一句:如果您取消选中“允许此预编译站点可更新”(右键单击该站点,

所以我在发布网站时遇到了问题。 我在VisualStudio2008SP1中

我有一堆用户控件,在一些页面上我以编程的方式使用它们

我在aspx页面上有一个参考资料

<%@ Reference Control="~/UserControls/Foo.ascx" %>

如果我导航到该页面,它可以正常工作,但是当我发布网站时,我得到了一个编译时错误。

Argh,我在这个问题上花费了大量的开发时间。有人能解决这个问题吗

顺便说一句:如果您取消选中“允许此预编译站点可更新”(右键单击该站点,选择属性页,MSBuild选项),它将生成


但是我需要该站点是可更新的。

它可能与特定类型不可用有关。是否可以更改控件引用,使类型和强制转换只使用基本控件类:

Control control = Page.LoadControl("~/UserControls/Foo.ascx");

是的,我可以控制它。但是我失去了对usercontrol上的方法的直接访问权

我知道我可以通过反射到控件中来访问这些方法,并且我已经成功地做到了这一点,但是访问站点上的所有其他用户控件还远远不够理想

另外,后续的错误是它找不到标记上的UserControl

<%@ Register src="CategoryRows.ascx" tagname="CategoryRows" tagprefix="abc" %>
<abc:CategoryRows ID="CategoryRows" runat="server" />


请注意,如果我基本上复制整个站点(源代码和所有源代码),那么我可以在本地和服务器上成功运行该站点。但是发布失败了。

我也遇到了同样的问题——事实上,在我的情况下,我可以让它编译并构建我的网站,但在进行自动构建时,它会爆炸得惊人

尝试按如下方式替换代码:

ASP.usercontrols_foo newFoo control = (ASP.usercontrols_foo)Page.LoadControl("~/UserControls/Foo.ascx");


(大写将基于目录名/控件名的大写方式,但在任何情况下都应适当突出显示)。

为用户控件指定名称空间(请参阅)。

强制转换用户控件可能会产生许多问题。我的方法是创建一个类(例如控件类)在强制转换后,将需要的所有属性和方法放在System.Web.UI.UserControl中,并从System.Web.UI.UserControl继承该类。然后将该控件类放在用户控制代码文件中,而不是System.Web.UI.UserControl用户中


现在,当你需要这个职业的时候。它也将是轻型铸造。

我已经找到了解决方案。如果我将在用户定义的命名空间中声明控件,那么我可以直接使用控件,而无需使用ASP或将其引用到aspx页面。

请检查:

您有
网站.publishproj
文件吗?

如果存在,请删除并重试,然后发布代码。

1+,在过去,我也遇到过同样的问题,因为我无法解决它,所以使用了反射。我也想知道如何解决这个问题。Riaz,您是否在发布网站时选中了“使用固定命名和单页程序集”复选框?我尝试了选中和取消选中“使用固定命名和单页程序集”复选框。(“允许此预编译站点可更新”在这两种情况下都被选中)我得到了相同的错误:“如果需要动态加载,则名称空间“ASP”(是否缺少程序集引用?)中不存在“some_user_control_ascx”的类型或名称空间名。动态加载需要Page.LoadControl,它只返回控件。如果有的话,我必须派生我的所有页面来指定加载不同用户控件的能力。即使控件是动态添加的。我们始终可以将控件强制转换为其基类。“------------------------------ctrl=Page.LoadControl(“~/DashBoardControl/BroadCastView.ascx”)占位符1.Controls.Add(ctrl)和DirectCast(ctrl,BraodCastView)如果不是ctrl,则“-------------------------------------------------------这里BraodCastView是BroadCastView.ascx的基类。这永远不会失败。
ASP.usercontrols_foo newFoo control = (ASP.usercontrols_foo)Page.LoadControl("~/UserControls/Foo.ascx");
USERCONTROLS_Foo newFoo control = (USERCONTROLS_Foo)Page.LoadControl("~/UserControls/Foo.ascx");