我创建了一个web control控件,在控件有几个textbox用作输入用,也同时创建了关联到textbox的property,在主页面中用如下代码进行了引用:
<%@ Register TagPrefix="UserInfo" TagName="Entry" Src="UserEntry.ascx" %>
...
...
<form id="form1" runat="server>
<UserInfo:Entry id="UserInfoEntry" runat="server" />
<asp:Button id="Button1" runat="server" Text="Submit" />
</form>
...
...但是我在调用页面的布局画面双击,进入到代码窗口,想在页面Page_Load事件输入调用此Web Control的代码时,却始终提示[名称“UserInfoEntry”未声明],请问原因为何,如何修正,谢谢?
    Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        If IsPostBack Then
            Response.WriteFile("Your name: " & UserEntry.username & "<br>")
        End If
    End Sub

解决方案 »

  1.   

    Response那行语句我把自定义控件名写错了,正确的应该是UserInfoEntry,但只是笔误,与错误提示无关。
      

  2.   

    查看一下页面自动生成的代码中,是否有定义变量:UserInfoEntry
    还应实例化才行,否则会报错。可能是由于IDE出错而导致未自动生成代码。可将控件删除后重新添加来恢复。
      

  3.   

    where is your code? code behind? does your control have a codebhind class, if yes, add this line to your aspx's code behindprotected UserInfoEntry as YourASCXCodeBehindClassotherwise, you have to use reflection
      

  4.   

    引用页面代码(HTML部分)
    <%@ Page Language="vb" AutoEventWireup="false" Codebehind="TestWebControl.aspx.vb" Inherits="aspnetWeb.TestWebControl"%>
    <%@ Register TagPrefix="UserInfo" TagName="Input" Src="webControl.ascx" %>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
    <HTML>
    <HEAD>
    <title>TestWebControl</title>
    </HEAD>
    <body>
    <form id="Form1" method="post" runat="server">
    <P>
    <UserInfo:Input id="UserEntry" runat="server" /></P>
    <P>
    <asp:Button id="Button1" runat="server" Text="Submit"></asp:Button></P>
    </form>
    </body>
    </HTML>引用页面代码(VB部分)
        Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            '在此处放置初始化页的用户代码
            If IsPostBack Then
                Response.WriteFile("Your name: " & userentry.UserName & "<br>")
                Response.WriteFile("Your Address: " & userentry.UserAddress & "<br>")
                Response.WriteFile("Your tel: " & userentry.UserTel & "<br>")
                Response.WriteFile("Your mail: " & userentry.UserMail & "<br>")
            End If
        End Sub
      

  5.   

    你应该在引用页面代码(VB部分)
    添加:
    protected 你的用户控件在页面上的ID as 你的用户控件类名(如果命名空间不同,你需要引用该命名空间)
      

  6.   

    in your aspx's code behind, declareprotected UserInfoEntry as aspnetWeb.webControl
      

  7.   

    兄弟,还要把WebControl.ascx中的protected改为public这样在aspx中可以直接引用
      

  8.   

    多谢蓝雨、思归两位,问题解决了。但是我在自我探索的过程中,我用到了Dim UserInfoEntry as aspnetWeb.webControl和Dim UserInfoEntry as New aspnetWeb.webControl都不行,前者提示“未将对象引用设置到对象的实例”,用后一条语句时错误提示出现在控件文件(Vb部全)中定义属性值的语句中,错误信息同样是“未将对象引用设置到对象的实例”。
    请部是不是一定要Protected才可以呢?请再指教,不胜感激!
      

  9.   

    要定义成
    Protected WithEvents UserInfoEntry as aspnetWeb.webControl别忘记你这是和ASP控件一样使用的,所以定义方式也应该一样。