这个问题我看到已经有很多人提过了,但是跟我提出的还是有一定区别的,我的文件如下:
aa.aspx文件,是主文件--------------------------------------
<%@ Page Language="C#"%>
<%@ Register TagPrefix="Consecution" TagName="Address" Src="Consecution_Address.ascx" %>
<script language="JavaScript" src="/js/GetSon.js"></script>
<script runat="server">
protected void Page_Load(Object Src, EventArgs E)
{
  UserControl uc = (UserControl)LoadControl("Consecution_Address.ascx");
  ((User_Address)uc).necessarily = "true";
  ((User_Address)uc).msg = "如果列表里没有您能选择的地区,请选其它的其它";
  xx.Controls.Add(uc);
}
</script>
<html>
<body >
<form runat="server">
  <b>利用程序代码来创建用户控件</b>
  <br>
<asp:PlaceHolder id="xx" runat="server"/><br>
<asp:label id="bb" runat="server"/>
</form>
</body>
</html>
--------------------------------------------------
Consecution_Address.ascx文件,是自定义的控件----------
<%@ Control ClassName="User_Address" Language="C#" Src="Consecution_Address.cs" Inherits="Consecution.Consecution_Address"%>
<select id="Address" runat="server" onchange="GetSon('Address',this.value)"/> <span id="Address_Son_Span"></span> <asp:label id="L_necessarily" runat="server"/>
<asp:requiredfieldvalidator
ControlToValidate="Address" runat="server"
Display="Dynamic"
ErrorMessage="请选择地区 "
Font-Bold="true"
/><asp:label id="L_msg" runat="server"/>
---------------------------------------------------------
Consecution_Address.cs文件,是自定义控件的处理文件--------
namespace Consecution
{
using System;
using System.Data;
using System.Collections;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using WebConn;

public class Consecution_Address : UserControl
{
protected HtmlSelect Address;
protected Label L_necessarily,L_msg;
protected string _necessarily,_msg;
Conn Conn = new Conn();

public string necessarily
{
get {return _necessarily;}
set {_necessarily = value;}
}
public string msg
{
get {return _msg;}
set {_msg = value;}
}

public void Page_Load(object src,EventArgs e)
{
Conn.ReturnTableView("select id,fid,name from Address where fid=0");
Address.Items.Clear();
Address.DataSource = Conn.dv;
Address.DataTextField = "name";
Address.DataValueField = "id";
Address.DataBind();
Address.Items.Insert(0,new ListItem("--请选择--",""));
if (necessarily == "true") L_necessarily.Text = "<span style=\"color:red\">*</span>";
L_msg.Text = msg;
}
}
}
------------------------------------------------------
这个控件的功能是读取一个连动菜单,采用了发送xml的方法来实现的,这个且不管它.
现在这样,运行aa.aspx文件,是可以正确运行的,但是aa.aspx文件没有做到代码与页面分离,现在我要做分离,因此另写了一个aa.cs文件,把Page_Load事件里的全部代码写到了aa.cs里,但是这样就出错了,无论如何都会报找不到控件的命名空间错误,哪个大侠能帮忙解决一下这个问题?或者帮我写一个能正确使用的cs文件也好.
还有一点需要说明的是,我是用记事本来写这些文件的,没有用到vs.net,是否也可以实现上述功能?

解决方案 »

  1.   

    加上这些试试:using System;
    using System.Collections;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Web;
    using System.Web.SessionState;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Web.UI.HtmlControls;
      

  2.   

    都加了的,给你看看我写的aa.cs文件,通不过
    using System;
    using System.Collections;
    using System.Data;
    using System.Drawing;
    using System.Web;
    using System.Web.SessionState;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Web.UI.HtmlControls;
    using System.Reflection;
    using Consecution;public class aa : Page
    {
    protected PlaceHolder xx;
    protected Label bb;
    protected Consecution.Consecution_Address User_Address;
    public void Page_Load(Object src , EventArgs e)
    {
    //调用UserControl2用户控件
    UserControl uc = (UserControl)LoadControl("Consecution_Address.ascx");
    bb.Text = uc.GetType().ToString();
    //设置用户控件的属性
    ((User_Address)uc).necessarily = "true";
    ((User_Address)uc).msg = "如果列表里没有您能选择的地区,请选其它的其它";
    xx.Controls.Add(uc);
    }
    }
      

  3.   

    >>>还有一点需要说明的是,我是用记事本来写这些文件的,没有用到vs.net,是否也可以实现上述功能?那当然!!找不到名称空间是小问题,如果已添加引用的,缺什么就直接using什么,如果没有引用到,先添加引用在using!
      

  4.   

    就是添加引用时就不对了
    using Consecution;这句出错,说是找不到类型或命名空间名称“Consecution”(是否缺少 using 指令或程序集引用?)
      

  5.   

    有人知道吗? qpl007(蓝色闪电)兄,回答我呀?
      

  6.   

    Consecution 
    dll引用路径不对
      

  7.   

    Consecution 
    dll引用路径不对我没有编译过dll呀,只是引用了ascx
      

  8.   

    to qpl007(蓝色闪电) 
    你的 aa 类的名称空间是什么?
    Consecution
      

  9.   

    using System;
    using System.Collections;
    using System.Data;
    using System.Drawing;
    using System.Web;
    using System.Web.SessionState;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Web.UI.HtmlControls;
    using System.Reflection;
    using Consecution;namespace Consecution
    {
        public class aa : Page
        {
           ...
        }
    }//这样写没有理由出错啊!
      

  10.   

    应该是对的,但是Consecution这个空间就是无法引用进去,报来报去地报无法找到命名空间错误,我在想,会不会是我没有使用vs.net的缘故,难道用记事本就不能使用这个功能吗?
    你可以试试,会报无法找到命名空间的错误的.
      

  11.   

    我也遇到类似的问题,我用vs.net+editplus,也出找个问题啊,我编译成dll也出问题,实在搞不懂。
      

  12.   

    如果主aspx.cs文件里不声明用户控件就正常,aspx文件里也可以直接设置控件属性,但一在cs里声明用户控件就出错。我用vs.net生成解决方案编译后也有错,说什么已经多次声明。如果不编译就会包: CS0246: 找不到类型或命名空间名称。
      

  13.   

    可以做成一个.dll试试,然后再用
      

  14.   

    我用你的//调用UserControl2用户控件
    UserControl uc = (UserControl)LoadControl("Consecution_Address.ascx");
    bb.Text = uc.GetType().ToString();
    //设置用户控件的属性
    ((User_Address)uc).necessarily = "true";
    ((User_Address)uc).msg = "如果列表里没有您能选择的地区,请选其它的其它";
    xx.Controls.Add(uc);报同样的错误,但该为//调用UserControl2用户控件
    Consecution_Address uc = (Consecution_Address)LoadControl("Consecution_Address.ascx");
    bb.Text = uc.GetType().ToString();
    //设置用户控件的属性
    uc.necessarily = "true";
    uc.msg = "如果列表里没有您能选择的地区,请选其它的其它";
    xx.Controls.Add(uc);就成功了。我是在vs.net的环境里做的。个人意见,仅供参考。
      

  15.   

    在vs.net里我也试验成功的,但是离开了那个环境,就不成功了,报无法找到Consecution_Address命名空间,有方法可以解决吗?我觉得它不应该是那么死板的,离不开vs.net的环境吧?