一、使用者控制項和自訂控制項的主要區別在於設計時的易創造性與易用性。
使用者控制項易於建立,為使用可視化設計工具的使用者提供有限的支援,每個應用程式中需要控制項的一個單獨副本,不能添加到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();
}
}