用户控件和自定义服务器控件的区别

一、用户控件和自定义控件的主要区别在于设计时的易创造性与易用性。
      用户控件易于创建,为使用可视化设计工具的使用者提供有限的支持,每个应用程序中需要控件的一个单独副本,不能添加到visual  studio工具箱中,适用于静态布局,它们在高级方案中使用起来可能不太方便。
自定义服务器控件是经过编译的代码,这使其易于使用但难于创建。它为使用者提供完全的可视化设计工具支持,仅在全局程序集缓存中需要控件的单个副本,可以添加到visual studio中的工具箱,适用于动态布局。
如果您的控件包含大量静态布局,用户控件则可能是较佳的选择。如果您的控件主要是动态生成的,自定义控件则是较佳的选择。

二、(1)用户控件和自定义控件概述  
       用户控件(UserControl):  扩展名为*.ascx,跟*.aspx在结构上相似,是指页面中 加载的功能块,只是用户控件不能单独作为页面运行,必须嵌入到*.aspx页面或其它用户控件中使用.  
       自定义控件,跟HtmlControl或WebControl相似,编译后可以添加引用到工具栏里面,直接用鼠标拖动使用.  
 
    (2)使用        
       在一个大系统中,有时候会只能几个*.aspx页面,其余的都是做成*.ascx页面,  
这样可以增强页面之间的藕合性,一个用户控件*.ascx都作为一个独立的功能块.  
       自定义控件是指编译后直接可以放到工具箱中用,就像TextBox,DataGrid一样  
在设计器中可以用鼠标拖动到页面上使用.  
       自定义服务器控件分为两种:    
               1.一种是用*.aspx代码和*.cs代码编译后生成DLL,再添加引用到工具箱使用.          
                   一般用于WebForm中.        
               2.另一种是只用*.cs实现,再编译生成DLL,添加到工具箱使用.  
                   一般用于WinForm中.  
       自定义控件生成步骤:  
             比如:    
               1.  将一个Button从设计器拖到页面中,  
                     对按钮大小,颜色或文本设置一个固定值,保存文件名为:  a.cs  
               2.  csc  /r:System.dll  /t:library/out:..\..\A.dll    a.cs  
               3.  右击工具箱空白处,弹出右击菜单后,选“添加移除项”,将刚生成的DLL  
                     添加到工具箱里面来,这样,就可以像一般的Button一样拖动使用了

三、(1)用户控件用.ascx文件表示,在"添加新项"中点击"vveb用户控件".它不是编译代码,编译随网页动态的进行

 

      自定义控件在dll文件中表示,它是编译代码。在“新建项目”的模块中点击“web控件库”,用户控件不会出现在工具箱中,而自定义控件会出现在工具箱中。

用户控件支持缓存,而自定义控件不支持缓存。

用户控件会对使用可视化设计的用户提供有限的支持,而自定义控件会提供全面的支持。

用户控件可以在一个应用程序中重用,但不能跨应用程序重用。

自定义用户就可以跨应用程序使用,它放在被称为全局程序集缓存的中央库中,以便那台服务器上的所有应用程序都可以使用它。

用户控件不能独立存在和使用,它要求用asp.net页面作为容器。

 下面是一个login用户控件的示例

public partial class Login : System.Web.UI.UserControl
{
    protected SqlConnection conn;
    protected SqlCommand cmd;
    protected SqlDataReader dr;
  
    /// <summary>
    /// Txtusername是用户控件的属性,要想在aspx访问它必须先封装起来为public才行
    /// </summary>
    public  string Txtusername
    {
        get { return this.TextBox1.Text; }
        set { this.TextBox1.Text = value; }
    }
    
    protected void Page_Load(object sender, EventArgs e)
    {

    }
    
    protected void Button1_Click1(object sender, EventArgs e)
    {
        string strname = this.TextBox1.Text.Trim();
        string strpwd = this.TextBox2.Text.Trim();
        //根据指定的密码利用哈希算法转换成一个MD5的哈希密码
        //this.Response.Write(System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(strpwd, "MD5"));

        conn = new SqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings["DBuserConnectionString"].ToString());
        conn.Open();
        cmd = new SqlCommand("select * from userdetails where username=@username and userpwd=@userpwd", conn);//System.Web.Configuration.FormsAuthPasswordFormat.MD5
        cmd.Parameters.Add(new SqlParameter("@username", strname));
        //注意如果数据库里的密码是加密的话,在这里根据条件查询赋值前也得MD5加密才是
        cmd.Parameters.Add(new SqlParameter("@userpwd", System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(strpwd, "MD5")));
        dr = cmd.ExecuteReader(CommandBehavior.CloseConnection);
        //前进下一条记录
        if (dr.Read())
        {
            //状态管理,在asp.net中默认的状态是用cookie保存的
            //在用户每次登陆成功时就把用户保存到Cookie中,并用一个复选框来管理用户是否多长时间保存状态
            HttpCookie cookie = new HttpCookie("username", strname);

            if (this.CheckBox1.Checked)
            {
                //设置cookie的过期日期
                cookie.Expires = DateTime.Now.AddMonths(1);
                //响应后添加到cookies集合里
                this.Response.Cookies.Add(cookie);
            }
            //过3秒后自动跳转页面,相当于html的mate标签
            this.Response.AppendHeader("refresh", "3;url=DataListDemo1.aspx");
        }
        else
        {
            this.Response.Write("username or password are wrong!");
        }
        conn.Close();
    }
}

posted @ 2011-04-20 14:53  一夜*孤舟  阅读(797)  评论(0编辑  收藏  举报