1. 程式人生 > >在使用者控制元件 ASCX 建立使用者控制元件 ASCX

在使用者控制元件 ASCX 建立使用者控制元件 ASCX

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow

也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!

               

"我建了兩個ascx,ascxA,ascxB
ascxA中放了一個PlaceHold,
ascxB中放了一個textBox
ascxA在page_load中動態建立了5個ascxB但是頁面上什麼都沒顯示"



這是來自論壇網友的問題,Insus.NET就以此問題做一個演示例子,方法與技巧分享給大家。

 

 在站點上建立一個使用者控制元件ascx B, 拉一個TextBox在這個控制元件上。
建立另一個使用者控制元件ascx A 在這個使用者控制元件上,拉一個Textbox 和一個按鈕,是讓使用者在文字框輸入資料,點一點銨鈕,這樣動態產生ascx B使用者控制元件,呈現於ascx A使用者控制元件的頁面上。
在站點上,建立一個aspx網頁。把使用者控制元件ascx 引用至aspx網頁上。再在aspx網頁上拉一個按鈕。讓使用者點一點這個銨鈕,去獲取動態產生的文字框的值,並顯示於aspx網頁上。

現在的問題,ascx A動態載入ascx B. 根據使用者輸入的數字來產生。
怎樣在aspx網頁上,去獲取那些動態產生文字框的值?

好,帶著疑問一步一步來完成它們。
建立一個站點,Insus.NET使用的是.NET 4.0 和C#作為程式語言。
建立一個AscxB.ascx使用者控制元件:

       
<%@ Control Language="C#" AutoEventWireup="true" CodeFile="AscxB.ascx.cs" Inherits="AscxB" %><asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
      View Code  

 
AscxB.ascx.cs:

       
using System;using System.Collections.Generic;using System.Linq;using System.Web;using System.Web.UI;using System.Web.UI.WebControls;public partial class AscxB : System.Web.UI.UserControl{    protected void Page_Load(object sender, EventArgs e)    {    }       }
      View Code  

 

 

 在站點上建立使用者控制元件AscxA.asx,在此控制元件上,拉一個文字框TextBox,一個銨鈕Button和一個容器PlaceHolder。在銨鈕新增onclick事件OnClick="ButtonGenerate_Click"

       
<%@ Control Language="C#" AutoEventWireup="true" CodeFile="AscxA.ascx.cs" Inherits="AscxA" %><asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>&nbsp;&nbsp;<asp:Button ID="ButtonGenerate" runat="server" Text="Generate" OnClick="ButtonGenerate_Click" /><br /><br /><asp:PlaceHolder ID="PlaceHolder1" runat="server"></asp:PlaceHolder>
      View Code  


AscxA.ascx.cs:

       
using System;using System.Collections.Generic;using System.Linq;using System.Web;using System.Web.UI;using System.Web.UI.WebControls;public partial class AscxA : System.Web.UI.UserControl{      protected void Page_Load(object sender, EventArgs e)    {          }    protected void ButtonGenerate_Click(object sender, EventArgs e)    {           }   }
      View Code  

 

 

下面是動態載入使用者控制元件的方法,為了能讓使用者控制元件ascx a載入到ascx b。 Insus.NET在此,先建立介面(interface):

 

 

 

介面寫好,去ascx B實作這個介面:



我們回到使用者控制元件ascxA cs內碼表,去寫按鈕Click的事件:

 

 


上圖中的29行程式碼,是判斷檔案框是否為空,是不是為數字。
第35程式碼,是動態載入使用者控制元件ascx B之後,並轉為介面IUserControlable。然後加入PlaceHolder容器中去。

現在,我們建立一個網頁.aspx,在此網頁中,我們引用使用者控制元件ascxa,還在拉一個銨鈕,和個Literal控制元件,銨鈕與Literal最開始狀態是隱藏的,主要是用來獲取資料與顯示資料。




.aspx.cs程式碼:

       
using System;using System.Collections.Generic;using System.Linq;using System.Web;using System.Web.UI;using System.Web.UI.HtmlControls;using System.Web.UI.WebControls;public partial class DynamicallyLoadUserControlDemo : System.Web.UI.Page{    protected void Page_Load(object sender, EventArgs e)    {            }    protected void ButtonGetValue_Click(object sender, EventArgs e)    {            }   }
      View Code  


現在,我們做一些其它,即是說,在Ascx A使用者控制元件,當有動態產生Ascx B控制元件之後,在網頁的Button才會顯示。如果沒有產生過銨鈕,網頁Button就是隱藏起來。
由於是否有控制元件產生是發生在ascx A使用者控制元件,而隱藏的物件在網頁上。這涉及到使用者控制元件與網頁之間的溝通與協調。
為了減低程式的複雜度,Insus.NET得寫一個介面,這個介面主體只有一個只寫屬性。



介面寫好了,我們在網頁.aspx.cs實作這個介面。說明白一點,就是網頁的銨鈕只接受顯示與隱藏,是誰來決定顯示與隱藏,它管不了。


具體是誰來控制顯示與隱藏呢,剛才所說,是在使用者控制元件ascx A的動態產生ascx B之後,這個網頁的Button就顯示。因此,我們去使用者控制元件ascx a的產生控制元件程式碼中新增:



有點疑問,怎樣能把網頁轉為介面呢? 因為我們上面有把網頁實作了IShowable這個介面。

Ok, 我們回到網頁cs,準備寫銨鈕click事件,來獲取資料。不過獲取資料起來,是有點困難,因為動態產生的控制元件,全是在使用者控制元件ascx A中呈現,而且每呈現的文字框是來自ascx B。
在網頁中,怎樣獲取俄使用者控制元件的ascx A的容器PlaceHolder呢? Insus.NET只會使用介面,因此還是寫另外一個介面,是為了讓網頁.aspx.cs去讀取使用者控制元件的Ascx A的PlaceHolder。



我們去使用者控制元件ascx A實用這個介面:



這樣子,我們就可以在網頁.aspx.cs的獲取值的銨鈕獲取這個容器了。另外,由於容器根據使用者的需求,也許不止單一次產生一個ascx B使用者控制元件,也許會有好幾個。我們怎樣知道哪一個文字框TextBox是哪一個TextBox呢?
還是寫一個介面吧,



介面寫好,我們去ascx B使用者控制元件來實作這個介面:



到現在為止,我們完全可以去網頁程式碼中,去寫銨鈕的Click獲取值的事件了:


上面程式碼中,#0是獲取placeholder容器。
#1是foreach容器中所有文字框。
#2是顯示文字框的值。

到此為止,算是演示完成了。不過,我們還是來一個最終的效果演示吧:



Demo source code:
http://download.cnblogs.com/insus/ASPDOTNET/Ascx_load_ascx_page_getvalue.rar


<script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>           

給我老師的人工智慧教程打call!http://blog.csdn.net/jiangjunshow

這裡寫圖片描述