.Net用户控件
用戶控件
用戶控件是個什么東西?
自定義的反復重用的控件集合
好處?
1.代碼重用
2.結構良好
3.分工開發
4.局部緩存
難點:
一.交換信息:
注意信息的交換只在相鄰層之間進行交換,如果是嵌套交換信息除Session外都需要一層一層的寫代碼交互
(一)從頁面向用戶控件交換信息。代碼寫在頁面中。
1.用戶控件名.FindControl("用戶控件中的控件的ID")
TextBox textBox1 = WUC1.FindControl("TextBox1") as TextBox;
暴力轉換:盡量少用
案例:添加按鈕click屬性,點擊后往用戶控件中傳信息
protected void btn_Click(object sender, EventArgs e){string s = Label1.Text;TextBox textbox1 = WebUC1.FindControl("TextBox1") as TextBox;textbox1.Text = s;}效果如圖:
?
?
2.事先在用戶控件中定義public屬性,通過屬性為里面的控件賦值或取值。
用戶控件中的代碼:
?寫好屬性之后會在設計界面用戶控件屬性的雜項中出現該屬性名,如下圖
頁面中的代碼:
同方法一:在按鈕上添加click事件
protected void Button1_Click(object sender, EventArgs e){WebUC1.TextValue = Label2.Text;}效果如圖:
(二)從用戶控件向頁面交換信息。代碼要寫用戶控件。
1.session
第一步:在用戶控件的按鈕中把數據放在Session中。
給button加click事件
protected void Button1_Click(object sender, EventArgs e){Session["text"] = TextBox1.Text;}第二步:在頁面的OnLoadComplete事件中,從Session中取出數據來,顯示在頁面上。?
在頁面中重寫override函數 onloadComplete
這樣在頁面加載完成后執行下面的方法,判斷Session["text"]中如果沒有信息就什么也不執行,注意第一行 base.OnLoadComplete(e)不能刪
protected override void OnLoadComplete(EventArgs e){base.OnLoadComplete(e);if (Session["text"]!=null){Label3.Text = Session["text"].ToString();}}?
?
效果如圖:
?
2.代理、委托 delegate
指向方法(動作)的引用。 Dog d = new Dog();
類比:類的使用 - 指向對象的引用
類的使用步驟:
第一步:用class 關鍵字定義一個類的類型
public class Dog
{
//成員變量定義
//成員屬性定義
//成員方法定義
}
第二步:使用這個新的類型定義一個變量(類的變量)引用。
Dog d;
第三步:把這個變量引用指向一個新對象。
d = new Dog();
第四步:通過調用引用,實現對對象的調用。
d.Name
d.Bark()
代理的使用步驟:
第一步: 使用 delegate 定義一個新的代理類型。
public delegate 返回類型 代理類型名( 參數定義);
例如:public delegate void ShowDelegate(string s);
第二步:使用新的代理類型定義一個變量(代理變量)
ShowDelegate Show;
第三步:把代理變量指向一個新的方法
Show = new ShowDelegate(方法名);
第四步:通過調用代理來實現對方法的調用。
Show("hello");
?案例:從一個用戶控件中向另一個用戶控件加添加節點
定義一個delegate代理ShowDelegate,然后生命一個代理實例化
public delegate void ShowDeletgate();//定義代理public ShowDeletgate Show;//實例化給button寫click事件
protected void btnAddNode_Click(object sender, EventArgs e){if (Session["list"] == null){List<FlowPath> temp = new List<FlowPath>();Session["list"] = temp;}List<FlowPath> list = Session["list"] as List<FlowPath>;list = list.OrderBy(p => p.Orders).ToList();int order = 1;if (list.Count>0){order = list.Last().Orders.Value+1;}FlowPath data = new FlowPath();if (Request["rbnode"] != null)//判斷是否選擇了radio {data.Code = DateTime.Now.ToString("yyyyMMddhhmmss") + order + Session["uid"].ToString();data.EmpId = Request["rbnode"].ToString();data.Orders = order;list.Add(data);Session["list"] = list;if (Show != null)//調用代理,代理名不加括號 {Show();//使用代理--類似于使用方法 }}else{Label1.Text = "請選擇要加載的節點";}}
?給代理寫所需要綁定的方法(可以是在另一個用戶控件上--誰需要這個方法在誰上面寫)
public void ShowSession(){if (Session["list"]!=null){Repeater1.DataSource = Session["list"] as List<FlowPath>;Repeater1.DataBind();}}給代理綁定方法--寫在加載的頁面上load里面,注意不要寫在if(!IsPostBack中)因為每次加載都需要綁定
綁定使用方法同屬性如:
UserList1.Show(show代理) = new UserList.ShowDeletgate(NodesShow1.ShowSession--這個ShowSession是個方法但是不加小括號)?
protected void Page_Load(object sender, EventArgs e){if (Session["uid"] == null){Response.Redirect("login.aspx");}if (!IsPostBack){}UserList1.Show = new UserList.ShowDeletgate(NodesShow1.ShowSession);//注意這里綁定方法的時候是 方法名 不帶小括號}?
?
二.路徑:
1.控件路徑:圖片、超鏈接
使用服務端的控件。標準控件或者HTML標記加上runat=server.
這樣服務端就會自動轉換成正確的路徑出來。
如:
<img id="img1" runat="server" src="images/delete.png" />注意加runat="sever"必須加上id=""
?
?
2.樣式表中值的路徑:background-image:url(路徑)
不要使用內聯樣式,使用外部樣式表來控制圖片路徑。
首先在解決方案下添加外部樣式表
?
代碼如下:
.dd {background-image:url(../images/h.png); }注意路徑必須正確:確保從樣式表可以找到對應的路徑
然后,給需要加樣式表的標簽一個class="dd"名(這里用的.dd給class 也可以給加id="dd"樣式表改為#dd)
最后在需要使用的頁面把樣式表拖到,源頁面的<head></head>中
?
?
?
3.外部資源路徑 - 用戶控件中引入外部腳本文件
使用 string path = ResoveClientUrl("服務器端路徑"); //返回的是客戶端對應的路徑
首先在用戶控件上加<script></script>指定路徑寫一個函數?注意不是# 是=,如下
<script src="<%= ShowScriptPath() %>" ></script>然后在解決方案下添加外部腳本
?
腳本代碼:
alert("這是外部腳本文件的內容")最后在cs代碼界面添加對應的方法
?
public string ShowScriptPath(){string path = "Scripts/JavaScript.js";//外部樣式表存放路徑path = this.ResolveClientUrl(path);//重新解析為可識別的路徑return path;}?
?
4.C#代碼的調用路徑
Response.Redirect("頁面");
使用應用程序路徑的根來解決
在路徑前面加上一個 ~ 符號--從跟目錄開始尋找
Response.Redirect("~/Default.aspx")
轉載于:https://www.cnblogs.com/liujiangping/p/4759051.html
總結
- 上一篇: Unity开发NGUI代码实现Scrol
- 下一篇: 前端工程师需要掌握的技能