0

希望这个标题至少有一些意义。

我今天第一次摆弄 ASP.NET 和 C# - 遵循教程。我已经很轻松地做到了这一点;但是,当我尝试实施时:

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

UserInfoBoxControl userInfoBoxControl = (UserInfoBoxControl)LoadControl("~/UserInfoBoxControl.ascx");
userInfoBoxControl.UserName = "John Doe";
userInfoBoxControl.UserAge = 78;
userInfoBoxControl.UserCountry = "Spain";
UserInfoBoxPH.Controls.Add(userInfoBoxControl);

我明白了

The type or namespace name 'UserInfoBoxControl' could not be found...

我的 Java 背景让我现在想用 '导入'这个控件类using,尽管我知道它@ Reference可以完成这项工作。我已经尝试通过删除教程前面的代码来进行一些基本的故障排除,但没有运气。从我在其他地方读到的内容来看,代码看起来一切都很好,所以我有点困惑并渴望在我的教程中继续前进:)

谢谢!

编辑:

我仍然处于这个障碍,所以我认为最终转储我所有的代码是最简单的:

默认.aspx

Default.aspx.cs(声明时出错userInfoBoxControl

用户信息框控件.ascx

UserInfoBoxControl.ascx.cs

4

2 回答 2

1

如果您正确声明了所有内容,那么您的代码应该可以工作。

需要Register 指令来引用页面中的控件、用户控件等。

Reference 指令,相反,“指示另一个用户控件、页面源文件或位于某个虚拟路径的任意文件应动态编译并链接到当前的 ASP.NET 文件(网页、用户控件或母版页)声明了这个指令。”

这只是一个猜测,但是您是否有可能在单个文件中声明了您的控制(即 C# 代码不在单独的文件中)并且您忘记了@ Control指令中的“className”属性?

编辑:我看过你的代码,问题是文件被命名为“UserInfoBoxControl”,但类的名称是WebUserControl

public partial class WebUserControl : System.Web.UI.UserControl {

您的@Reference指令正在导入文件“~/UserInfoBoxControl.ascx”,但类型名称是 WebUserControl。
试试这个,它应该编译:

WebUserControl userInfoBoxControl = (WebUserControl)LoadControl("~/UserInfoBoxControl.ascx");
于 2012-05-11T21:29:40.650 回答
1

您将在页面指令中导入命名空间。您注册用户控件:

<%@ Register TagPrefix="uc1" TagName="UserInfoBox" Src="UserInfoBoxControl.ascx" %>

编辑:(来自我的评论)引用命名空间 ASP:

using ASP;
于 2012-05-11T21:08:05.863 回答