ASP.NET服務器控件分類簡介


ASP.NET服務器控件

 

服務器控件就是在服務器端解析的控件,在ASP.NET中,就是有runat=server的控件,這些控件經處理后會生成客戶端呈現代碼發送到客戶端,本質上說,服務端控件就是.NET框架中的類。

 

ASP.NET服務器控件控件可分為以下幾類:

 

1.HTML服務器控件

它把標准客戶端控件封裝成類,這些類位於System.Web.UI.HtmlControls命名空間中

(如Htmltable,HtmlButton,HtmlHead等)。它們繼承自HtmlControls,它們共有的基本屬性有Attributes,Style,Disabled,TagName。事實上把任何標准客戶端控件加上屬性runat=server,就把這些客戶端控件變成了HTML服務器控件,這時我們就可以在后置代碼中處理這些控件了。注意這時成為了服務器控件了有"三個ID",同時許多服務器控件的操作都能實現(http://kendezhu.iteye.com/blog/718294)。Attributes屬性是一個AttributeCollection類型的集合類,需要傳遞一個鍵/值對集合,Style屬性是一個CssStyleCollection集合,也需要傳遞一個鍵/值對集合。如:

<input id="Button1" type="button" value="button" runat="server"/>

后置代碼:Button1.Attributes.Add("onclick","alter('給我增加了一個客戶端事件')");

         Button1.Style.Add("background-color","green");

Html服務器控件中有許多容器控件,如Htmltable,Div,Span等,它們擁有的共同屬性有InnerHtml(是返回或者設置容器控件開閉標簽內的HTML文本)和InnerText(是返回或者設置容器控件開閉標簽內的純文本,HTML文本將被解析為純文本)。

直接雙擊Html服務器控件,會在head里自動添加客戶端事件,要想Html服務器控件觸發服務端事件,要

<input type="button" id="button1" runat="server" value="上傳" onserverclick="buttonclick" />添加一個onserverclick事件,在后置代碼里:

 protected void buttonclick(object sender,EventArgs e)    

 {

  }

有倆參數,第一個是觸發事件的對象,通常是object類型,第二個是參數信息,大多數事件的參數類型是

EventArgs。

 
2.Web服務器控件
Web服務器控件位於System.Web.UI.WebControls命名空間中。所有Web服務器控件都是從WebControls派
生出來的。很多Web服務器控件所輸出的客戶端代碼很復雜。Web服務器控件總是以asp:開頭,它們有很多
共同的屬性和方法。Label有一個叫AssociatedControlID的屬性,用來通過控件ID將那個控件與Label關
聯(那個控件是文本框,就會是文本框得到焦點,是按鈕的話,就會觸發按鈕的單擊事件等等)。
對於Form標簽有一個DefaultButton屬性,用於設置默認按鈕,頁面打開后,按回車就會觸發該按鈕事件。
Panel有滾動功能,當頁面的控件太多時,可以將這些控件放到Panel中,然后設置控件的ScrollBars屬性為
Auto,這樣當控件的長或寬超過Panel的長或寬時就會出現滾動條。 還可以設置樣式Style="overflow: scroll;"
RadioButtonList和CheckBoxList有一些而外的控制輸出布局的屬性,RepeatLayout(是表結構(table)還
是非表結構)RepeatDirection(輸出時是垂直還是水平)RepeatColumns(設置列數,前提是表結構)
CellPadding,CellSpacing,TextAlign(前提是表結構,配置列的空間和對齊方式)。
<asp:Panel ID="Panel1" runat="server" Height="100px" Width="300px" ScrollBars="Auto">
            <asp:CheckBoxList ID="CheckBoxList1" runat="server" RepeatColumns="2">
                <asp:ListItem>德國</asp:ListItem>
                <asp:ListItem>西班牙</asp:ListItem>
                <asp:ListItem>阿根廷</asp:ListItem>
            </asp:CheckBoxList>
            <asp:RadioButtonList ID="RadioButtonList1" runat="server" RepeatLayout="Table" 
                RepeatColumns="3" RepeatDirection="Horizontal">
                <asp:ListItem>巴西</asp:ListItem>
                <asp:ListItem>中國</asp:ListItem>
                <asp:ListItem>荷蘭</asp:ListItem>
            </asp:RadioButtonList>
            <asp:BulletedList ID="BulletedList1" runat="server">
                <asp:ListItem>韓國</asp:ListItem>
                <asp:ListItem>阿富汗</asp:ListItem>
                <asp:ListItem>日本</asp:ListItem>
            </asp:BulletedList>
        </asp:Panel>
BulletedList列表控件的BulletStyle(顯示類型)BulletImageUrl(左側的圖像)DisplayMode(文本,超鏈接或LinkButton,設為LinkButton后還可以設置按鈕的單擊事件)
如:protected void BulletedList1_Click(object sender,BulletedListEvenArgs e)
    {
       //BulleteListEventArgs參數包含了當前點擊中的Item項
       string itemtext=BulletedList1.Items[e.Index].Text;
       Label1.Text="你選擇的Item是"+itemtext;
    }

 

 

3.驗證控件

在ASP時代,未防止用戶隨意地輸入錯誤數據,通常要編寫大量的javascript代碼,在客戶端提前預防錯誤。ASP.NET 3.5提供了5中驗證控件,其中4個用於對指定類型的錯誤進行驗證,還有一種可以提供自定義的驗證。這些控件大多在客戶端完成驗證過程,也可以定義服務器的驗證方式。驗證控件位於System.Web.UI.Webcontrols命名空間中,它們都派生自BaseValidtor基類。他們所共有的成員有:

ControlToValidate(指定要驗證的控件)Display(指定錯誤消息如何顯示,Static或Dynamic)

EnableClientScript(是否允許客戶端驗證)ErrorMessage(顯示在錯誤匯總ValidationSummary控件中的錯誤消息)Text(在驗證控件旁邊顯示的錯誤文本)IsValid(判斷相應的控件值是否有效)

SetFocusOnError(當驗證失敗時,是否將焦點位於出錯的控件上)ValidationGroup(當頁面存在多個驗證控件時,指定分組,將避免驗證沖突)

RequiredFieldValidator:必須輸入驗證。

RangeValidator:輸入范圍驗證,主要屬性Type等。

CompareValidator:比較驗證,主要屬性有:ControlToCompare(和那個控件的值比較),Type,

ValueToCompare(和某個固定值比較)。

RegularExpressionValidator:正則表達式驗證,主要屬性有ValidationExpression(正則表達式)。

CustomValidator:自定義驗證,主要屬性ClientValidationFunction(客戶端驗證,指定客戶端函數名),

ServerValidate事件(服務端驗證)。

CustomValidator控件客戶端驗證舉例:

function kehuduan(ct1,args)

 {    獲取要驗證的值            args.IsValue用於返回驗證結果是否符合

   if(args.Value=="劉德華"){args.IsValue=true}else{args.IsValue==false}

 }

CustomValidator控件服務端端驗證舉例:(要聲明ServerValidate事件,該事件在客戶端驗證完后,頁面產生回發后執行,一般用於與業務邏輯相關的驗證)

Protected void CustomValidator1_ServerValidate(object sender,ServerValidateEventArgs args)

{

try{args.IsValid=args.Value=="劉德華";}catch{args.IsValid=false;}

}

 

ValidationGroup屬性是用來把驗證控件與一些觸發驗證的控件(比如Button)分成一組的屬性,比如頁面上有三個TextBox和它們的驗證控件及三個Button,如果不分組的話,單擊任何一個Button都會觸發所有的驗證控件對自己所驗證的TextBox進行驗證。分組的話,就只是與該Button一組的驗證控件對自己所驗證的TextBox進行驗證。Button有一個屬性CausesValidation,設置其是否觸發驗證。

要訪問頁面上所有的驗證控件,可以使用Page.Validators集合屬性來遍歷,如:

Protected void CheckBox1_CheckedChanged(object sender,EventArgs e)

{

  foreach(BaseValidator item in Page.Validators)

   {

      item.Enable=CheckBox1.Checked;

      item.EnableClientScript=CheckedBox2.Checked;  

   }

}

用兩個CheckBox來設置這些驗證控件是否允許驗證和是否允許客戶端腳本。

 

 

4. 高級Web服務器控件:

屬於Web服務器控件的范疇,這些控件具有更高級的性能和特性,並且會生成大量

的HTML標記和JavaScript腳本來創建用戶界面,比如Calendar控件,AadRotator及TreeView控件等。

 

Calendar日歷控件主要有兩方面的更能:顯示和選擇日期,在日歷網格中顯示約會或其他信息。

可以使用Calendar的智能標簽為其選擇一種外觀,可以通過SelectionChanged事件來獲取當前選擇的日期:  

protected void Calender1_SelectionChanged(object sender,EventArgs e)

    {

      Label1.Text="當前日期為"+Calender1.SelectedDate.ToShortDateString();

    }

用SelectedDate屬性可以獲得選擇的日期。

而SelectionMode屬性枚舉(Day:可以選單個日期,DayWeek:可選單個日期或整周,DayWeekMonth:可選單個

日期,整周或整月)如果選了后兩種模式,就可以通過設置FirstDayOfWeek屬性來設置一周的第一天是星期幾。

用SelectedDates屬性可以獲得選的多個日期。

   Protected void Calendar_SelectionChanged(object sender,EventArgs e)

    {

      Label1.Text="當前選擇的日期為:<br/>";

      foreach(DateTime dt in Calendar.SelectedDates)

       {

         Label1.Text=dt.ToShortDateString()+"<br/>";

       }

    }

其他樣式屬性:DayHeaderStyle(星期欄)DayStyle(日期)NextPreStyle(下一個月按鈕)

OtherMonthDayStyle(其他月的日期)等。

Calendar有一個DayRender事件(當Calendar顯示時觸發),該事件提供了一個DayRenderEventArgs類型的

參數,通過該參數的Day屬性可以獲得Calendar里的日期,在該事件中我們可以設置一些限制:

    protected void Calendar1_DayRender(object sender,DayRenderEventArgs)

     {

       if(e.Day.IsWeekend)

        {

          e.Day.IsSelectable=false; (設置不可選)

        }

       if(e.Day.IsOtherMonth)

        {

          e.Cell.Text="-";  e.Cell代表一個日期框

        }

       if(e.Day.Date.Month==3&&e.Day.Date.day==8)  判斷日期是否為3月8號

        {

          e.Cell.BackColor=System.Drawing.Color.Red;

          e.Cell.Text="三八婦女節";

        }

     }

 

 

MultiView控件可以讓開發人員定義多個視圖,在同一時刻只顯示一個,如下代碼:

 <asp:MultiView ID="MultiView1" runat="server" ActiveViewIndex="0">

    <asp:View ID="view1" runat="server"></asp:View>

    <asp:View ID="view2" runat="server"></asp:View>

    <asp:View ID="view3" runat="server"></asp:View>

    <asp:View ID="view4" runat="server"></asp:View>

 </asp:MultiView>

每個View就代表一個視圖,可以在里面添加任何代碼。ActiveViewIndex代表View的索引,就是頁面加載時

要顯示的視圖。可以通過MultiView的CommandName來轉換視圖,這個CommandName就是Button的一個屬性,

其值可以取PrevView(上一視圖)NextView(下一視圖)SwitchViewByID(View的ID,可以從Button的

CommandArgument獲得View的ID)SwitchViewByIndex(可以從Button的CommandArgument獲得View的索引)

雖然MultiView控件很方便,但不要放過多的控件,因為每次頁面回發時,每個控件狀態都持續化到視圖狀

態中,會給頁面增加負擔,因此建議使用分頁方式設計。

 

 

Wizard控件與MultiView控件非常相似,同一時刻只能顯示一個視圖,WizardStep相當於View。前者比后者

提供了更多的定制功能,比如導航按鈕和模板功能等。可以通過智能標簽來選擇樣式及添加刪除修改步驟

,這里面的主要屬性有:Title(步驟名)AllowReturn(過了這一步可不可以返回)。當然是用Wizard控件不

僅僅是顯示用的,更重要的是要完成一些與客戶的交互(比如注冊等)。這就需要配合一些事件來完成這些

更能:ActiveStepChanged(當ActiveStepIndex改變時發生)CancelButtonClick(按下取消按鈕時發生)

FinishButtonClick(按下完成按鈕時發生)NextButtonClick與PrevousButtonClick(按下向下或向上按鈕

時發生)SiderBarButtonClick(在側邊欄處單擊時發生)。

 protected void Wizard1_NextButtonClick(object sender, WizardNavigationEventArgs e)

        {

            if (Wizard1.ActiveStepIndex==0)

            {

                ViewState["0"] = TextBox1.Text;

            }

            if (Wizard1.ActiveStepIndex==1)

            {

                ViewState["1"] = TextBox2.Text;

            }

        }

 protected void Wizard1_FinishButtonClick(object sender, WizardNavigationEventArgs e)

      {

            Label7.Text = ViewState["0"].ToString() + ViewState["1"].ToString() + ViewState["2"].ToString() + ViewState["3"].ToString();

      }

  protected void Wizard1_CancelButtonClick(object sender, EventArgs e)

        {

             ViewState["0"]=null;

              ViewState["1"]=null;

               ViewState["2"]=null;

               ViewState["3"] = null;

               Wizard1.MoveTo(this.WizardStep1);

        }


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM