希望这个标题至少有一定道理。
我今天第一次使用ASP.NET和C# - 按照教程进行操作。我很舒服地到达this;但是,当我尝试实施时:
<%@ 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
做这个工作。我通过删除本教程前面的代码尝试了一些基本的故障排除,但没有运气。从我在其他地方读到的,代码看起来都没问题,所以我有点困惑,并且热衷于继续我的教程:)
谢谢!
修改
我仍处于这个障碍,所以我认为最好只转储我的所有代码:
Default.aspx.cs(声明userInfoBoxControl
时发生错误
答案 0 :(得分:1)
您将在页面指令中导入名称空间。您注册用户控件:
<%@ Register TagPrefix="uc1" TagName="UserInfoBox" Src="UserInfoBoxControl.ascx" %>
编辑:(来自我的评论)引用名称空间ASP:
using ASP;
答案 1 :(得分:1)
如果您正确地宣布了所有内容,那么您的代码应该可以正常运行。
在页面,用户控件等中引用控件需要Register directive。
Reference directive,而不是“表示另一个用户控件,页面源文件或位于某个虚拟路径的任意文件应该动态编译并链接到当前的ASP.NET文件(网页) ,声明此指令的用户控件或母版页。“
这只是一个猜测,但你是否有可能在单个文件中声明你的cotrol(即C#代码不在一个单独的文件中)而你忘记了@ Control
指令中的“className”属性?
编辑:我见过你的代码,问题是文件被命名为“UserInfoBoxControl”,但是类的名称是WebUserControl
:
public partial class WebUserControl : System.Web.UI.UserControl {
您的@Reference
指令正在导入文件“〜/ UserInfoBoxControl.ascx”,但类型名称为WebUserControl。
试试这个,它应该编译:
WebUserControl userInfoBoxControl = (WebUserControl)LoadControl("~/UserInfoBoxControl.ascx");