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

时间:2009-05-05 17:53:52

标签: asp.net user-controls

当我尝试发布网站时,我遇到了问题。 我在visual studio 2008 sp1。

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

我在aspx页面上有一个参考

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

然后在代码behing上我使用

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

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

8 个答案:

答案 0 :(得分:6)

唉,我在同一个问题上的开发时间正在减少。有人有解决方案吗?

BTW:如果取消选中“允许此预编译站点可更新”,则会构建它(右键单击网站,选择“属性页”,“MSBuild选项”)

但我需要网站可以更新。

答案 1 :(得分:2)

我遇到了同样的问题 - 实际上,在我的情况下,我可以让它来编译和构建我的网站,但在进行自动构建时它会非常爆炸。

尝试按以下方式更换代码:

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

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

(大写将基于您的目录名称/控件名称的大小写 - 但在任何一种情况下都应该适当地突出显示。)

答案 2 :(得分:1)

为用户控制指定命名空间(请参阅Dynamically Load a user control (ascx) in a asp.net website)。

答案 3 :(得分:1)

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

答案 4 :(得分:0)

这可能与特定类型无法使用有关。您可以更改控件引用,以便类型和强制转换只使用基本Control类:

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

答案 5 :(得分:0)

是的,我可以将它投射到Control。但后来我失去了对usercontrol方法的直接访问权限。

我知道我可以通过反映到控件中来访问这些方法,并且我已经成功地完成了这项操作,但是访问网站上的所有其他用户控件远非理想。

此外,后续错误是它无法找到标记上的用户控件

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

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

答案 6 :(得分:0)

转换用户控件可能会产生很多问题。我的方法是创建一个类(比如控件类),在转换后放置所需的所有属性和方法,并从System.Web.UI.UserControl继承这个类。然后在你的用户cotrol代码文件而不是System.Web.UI.UserControl用户此控件类。

现在只需要使用此类进行强制转换。它也将是轻型铸造。

答案 7 :(得分:0)

请检查:

你有website.publishproj档吗? 如果存在,则删除并再次尝试并发布代码。