ASP.NET 2.0中的Web和HTML伺服器控制項

來源:互聯網
上載者:User
asp.net|web|伺服器|控制項

  除了代碼和標記之外,ASP.NET 2.0頁面還可以包含伺服器控制項,它們是可程式化的伺服器端對象,典型情況下表現為頁面中的UI元素(例如文字框或映像)。伺服器控制項參與頁面的執行過程,並給用戶端產生自已的標記呈現內容。伺服器控制項的優勢在於,它讓開發人員從簡單的積木式的組件中擷取複雜的呈現方式和操作行為,極大地減少了產生動態Web頁面所需要編寫的代碼量;另外一個優勢是,定製它們的呈現方式和行為非常簡單。伺服器控制項所暴露的屬性可以通過宣告式(在標記中)或編程(在代碼中)設定。伺服器控制項(和頁面控制項本身)還暴露了一些事件,開發人員可以處理這些事件,在頁面執行的過程中,或者響應向伺服器發回頁面的用戶端操作(Postback)的時候,所需來執行的特定操作。伺服器控制項還簡化了保留狀態資訊的問題,它會自動地在多個成功的“發回” 操作之間保留值。

  伺服器控制項是在.aspx檔案中使用自訂標籤或固有的HTML標記聲明的,它包含了runat="server"屬性值。固有的HTML標記是由System.Web.UI.HtmlControls名字空間中的一個控制項來處理的。沒有顯式地映射到某個控制項的標記會被指定為System.Web.UI.HtmlControls.HtmlGenericControl類型。

  下面的例子使用了四個伺服器控制項:<form runat=server>、<asp:textbox runat=server>、<asp:dropdownlist runat=server>和<asp:button runat=server>。在啟動並執行時候這些伺服器控制項自動地產生HTML內容。

<form action="intro4_vb.aspx" method="post" runat=server>
<h3> Name: <asp:textbox id="Name" runat="server"/>
Category: <asp:dropdownlist id="Category" runat=server>
<asp:listitem >psychology</asp:listitem>
<asp:listitem >business</asp:listitem>
<asp:listitem >popular_comp</asp:listitem>
</asp:dropdownlist>
</h3>
<asp:button text="Lookup" runat="server"/>
</form>
  請注意:這些伺服器控制項自動地保留了往返於伺服器之間的用戶端所輸入的值。這些控制項狀態並非儲存在伺服器上(它們儲存在往返於請求之間的<input type="hidden">表單欄位中)。它不需要用戶端指令碼。

  除了支援標準的HTML輸入控制項之外,ASP.NET還允許開發人員在頁面中使用豐富的定製控制項。例如,下面的例子示範了如何使用<asp:adrotator>控制項在頁面上動態地顯示滾動廣告。

<form action="intro5_vb.aspx" method="post" runat="server">
<asp:adrotator AdvertisementFile="ads.xml" BorderColor="black" BorderWidth=1 runat="server"/>
<h3> Name: <asp:textbox id="Name" runat="server"/>
Category: <asp:dropdownlist id="Category" runat=server>
<asp:listitem >psychology</asp:listitem>
<asp:listitem >business</asp:listitem>
<asp:listitem >popular_comp</asp:listitem>
</asp:dropdownlist>
</h3>
<asp:button text="Lookup" runat="server"/>
</form>
  處理伺服器控制項事件

  每個ASP.NET伺服器控制項都能夠暴露一個物件模型,它包含了屬性、方法和事件。ASP.NET開發人員可以使用這個物件模型清晰地修改頁面、與頁面互動操作。

  下面的例子示範了ASP.NET頁面開發人員如何處理<asp:button runat=server>控制項的OnClick事件來改變<asp:label runat=server>控制項的Text屬性的。

<html>
<head>
<link rel="stylesheet"href="intro.css">
</head>

<script language="VB" runat=server>
Sub SubmitBtn_Click(Sender As Object, E As EventArgs)
Message.Text = "Hi " & HttpUtility.HtmlEncode(Name.Text) & ", you selected: " & Category.SelectedItem.Text
End Sub
</script>

<body>
<center>
<form action="intro6_vb.aspx" method="post" runat="server">
<asp:adrotator AdvertisementFile="ads.xml" BorderColor="black" BorderWidth=1 runat="server"/>
<h3> Name: <asp:textbox id="Name" runat="server"/>
Category: <asp:dropdownlist id="Category" runat=server>
<asp:listitem >psychology</asp:listitem>
<asp:listitem >business</asp:listitem>
<asp:listitem >popular_comp</asp:listitem>
</asp:dropdownlist>
</h3>
<asp:button text="Lookup" runat="server"/>
<p>
<asp:label id="Message" runat="server"/>
</form>
</center>
</body>
</html>
  這個簡單的例子與前面示範的“Intro3”樣本功能相當。請注意,在這個新的基於伺服器控制項的例子中,代碼變得非常清晰和簡單了。我們以後還將看到,ASP.NET頁面架構組件也暴露了大量的頁面層次的事件,在頁面的處理過程中,你可以編寫在特定時間執行的代碼。這些事件包括Page_Load和Page_Render。

  使用伺服器控制項

  ASP.NET伺服器控制項是在頁面中使用包含runat="server"屬性的宣告式標記來定義的。下面的例子聲明了三個<asp:label runat="server">伺服器控制項,並定義了每個控制項的文本和樣式屬性。

<html>
<body>
<h3><font face="Verdana">Declaring Server Controls</font></h3>
This sample demonstrates how to declare the <asp:label> server control and
manipulate its properties within a page.
<p>
<hr>
<asp:label id="Message1" font-size="16" font-bold="true" forecolor="red" runat=server>This is Message One</asp:label>
<br>
<asp:label id="Message2" font-size="20" font-italic="true" forecolor="blue" runat=server>This is Message Two</asp:label>
<br>
<asp:label id="Message3" font-size="24" font-underline="true" forecolor="green" runat=server>This is Message Three</asp:label>
</body>
</html>
  動作伺服器控制項

  你可以用編程的方式,通過提供ASP.NET伺服器控制項的id屬性來識別伺服器控制項;還可以在運行時刻,使用這個id指標來編程操作該伺服器控制項的物件模型。例如,下面的例子示範了頁面開發人員如何在Page_Load事件中編程設定<asp:label runat="server">控制項的Text屬性。

<html>
<script language="VB" runat="server">
Sub Page_Load(Sender As Object, E As EventArgs)
Message.Text = "You last accessed this page at: " & DateTime.Now
End Sub
</script>

<body>
<h3><font face="Verdana">Manipulating Server Controls</font></h3>
This sample demonstrates how to manipulate the <asp:label> server control within
the Page_Load event to output the current time.
<p>
<hr>
<asp:label id="Message" font-size="24" font-bold="true" runat=server/>
</body>
</html>
  處理控制項的事件

  ASP.NET伺服器控制項也可以暴露和引發伺服器事件,以供頁面開發人員處理。頁面開發人員可以通過宣告式地給每個控制項編寫事件來實現這項功能(在這種情況下,事件的屬性名稱表明事件的名稱,屬性的值表明被調用的方法的名稱)。例如,下面的程式碼範例示範了如何給按鈕控制項編寫OnClick事件。

<html>
<script language="VB" runat="server">
Sub EnterBtn_Click(Sender As Object, E As EventArgs)
Message.Text = "Hi " & Name.Text & ", welcome to ASP.NET!"
End Sub
</script>

<body>
<h3><font face="Verdana">Handling Control Action Events</font></h3>
<p>
This sample demonstrates how to access a <asp:textbox> server control within the "Click" event of a <asp:button>, and use its content to modify the text of a <asp:label>.
<p>
<hr>

<form action="controls3.aspx" runat=server>
<font face="Verdana"> Please enter your name:
<asp:textbox id="Name" runat=server/>
<asp:button text="Enter" runat=server/>
<p>
<asp:label id="Message" runat=server/>
</font>
</form>

</body>
</html>
  處理多個伺服器事件

  事件處理常式為頁面開發人員在ASP.NET頁面中構造邏輯提供了一條清晰的途徑。例如,下面的例子示範了如何在一個頁面上處理四個按鈕事件。

<html>
<script language="VB" runat="server">
Sub AddBtn_Click(Sender As Object, E As EventArgs)
If Not (AvailableFonts.SelectedIndex = -1)
InstalledFonts.Items.Add(New ListItem(AvailableFonts.SelectedItem.Value))
AvailableFonts.Items.Remove(AvailableFonts.SelectedItem.Value)
End If
End Sub

Sub AddAllBtn_Click(Sender As Object, E As EventArgs)
Do While Not (AvailableFonts.Items.Count = 0)
InstalledFonts.Items.Add(New ListItem(AvailableFonts.Items(0).Value))
AvailableFonts.Items.Remove(AvailableFonts.Items(0).Value)
Loop
End Sub

Sub RemoveBtn_Click(Sender As Object, E As EventArgs)
If Not (InstalledFonts.SelectedIndex = -1)
AvailableFonts.Items.Add(New ListItem(InstalledFonts.SelectedItem.Value))
InstalledFonts.Items.Remove(InstalledFonts.SelectedItem.Value)
End If
End Sub

Sub RemoveAllBtn_Click(Sender As Object, E As EventArgs)
Do While Not (InstalledFonts.Items.Count = 0)
AvailableFonts.Items.Add(New ListItem(InstalledFonts.Items(0).Value))
InstalledFonts.Items.Remove(InstalledFonts.Items(0).Value)
Loop
End Sub
</script>
<body>
<h3><font face="Verdana">Handling Multiple Control Action Events</font></h3>
<p>
This sample demonstrates how to handle multiple control action events raised from
different <asp:button> controls.
<p>
<hr>

<form action="controls4.aspx" runat=server>
<table>
<tr>
<td>
Available Fonts
</td>
<td>
<!-- Filler -->
</td>
<td>
Installed Fonts
</td>
</tr>
<tr>
<td>
<asp:listbox id="AvailableFonts" width="100px" runat=server>
<asp:listitem>Roman</asp:listitem>
<asp:listitem>Arial Black</asp:listitem>
<asp:listitem>Garamond</asp:listitem>
<asp:listitem>Somona</asp:listitem>
<asp:listitem>Symbol</asp:listitem>
</asp:listbox>
</td>
<td>
<!-- Filler -->
</td>
<td>
<asp:listbox id="InstalledFonts" width="100px" runat=server>
<asp:listitem>Times</asp:listitem>
<asp:listitem>Helvetica</asp:listitem>
<asp:listitem>Arial</asp:listitem>
</asp:listbox>
</td>
</tr>
<tr>
<td>
<!-- Filler -->
</td>
<td>
<asp:button text="<<" runat=server/>
<asp:button text="<" runat=server/>
<asp:button text=">" runat=server/>
<asp:button text=">>" runat=server/>
</td>
<td>
<!-- Filler -->
</td>
</tr>
</table>
</form>
</body>
</html>

  執行頁面導航(第一種情況)

  在實際的Web應用程式中,多個頁面之間的導航是常見的。下面的例子示範了如何使用<asp:hyperlink runat=server>控制項導航到另外一個頁面(同時傳遞了自訂的查詢字串參數)。接著這個例子示範了如何輕易地在目標頁面上得到這些查詢字串參數。

<html>
<script language="VB" runat="server">
Sub Page_Load(Sender As Object, E As EventArgs)
Dim RandomGenerator As Random
RandomGenerator = New Random(DateTime.Now.Millisecond)
Dim RandomNum As Integer
RandomNum = RandomGenerator.Next(0, 3)
Select RandomNum
Case 0:
Name.Text = "Scott"
Case 1:
Name.Text = "Fred"
Case 2:
Name.Text = "Adam"
End Select
AnchorLink.NavigateUrl = "controls_navigationtarget_vb.aspx?name=" & System.Web.HttpUtility.UrlEncode(Name.Text)
End Sub
</script>
<body>
<h3><font face="Verdana">Performing Page Navigation (Scenario 1)</font></h3>
<p>
This sample demonstrates how to generate a HTML Anchor tag that will cause the client to
navigate to a new page when he/she clicks it within the browser.
<p>
<hr>
<p>
<asp:hyperlink id="AnchorLink" font-size=24 runat=server>
Hi <asp:label id="Name" runat=server/> please click this link!
</asp:hyperlink>
</body>
</html>
  執行頁面導航(第二種情況)

  並非所有的頁面導航都由用戶端的超級連結發起。ASP.NET頁面開發人員調用Response.Redirect(url)方法也可以發起用戶端頁面的重新導向或導航。這種情況典型發生在真正進行導航之前,伺服器端需要驗證用戶端的輸入資訊的時候。

  下面的例子示範了如何使用Response.Redirect方法把參數傳遞到另外一個目標頁面。它還示範了如何在目標頁面上簡單地擷取這些參數。

<html>
<script language="VB" runat="server">
Sub EnterBtn_Click(Sender As Object, E As EventArgs)
 If Not (Name.Text = "")
  Response.Redirect("Controls_NavigationTarget_vb.aspx?name=" & System.Web.HttpUtility.UrlEncode(Name.Text))
 Else
  Message.Text = "Hey! Please enter your name in the textbox!"
 End If
End Sub
</script>
<body>
<h3><font face="Verdana">Performing Page Navigation (Scenario 2)</font></h3>
<p>
This sample demonstrates how to navigate to a new page from within a <asp:button> click event, passing a <asp:textbox> value as a querystring argument (validating first that the a legal textbox value has been specified).
<p>
<hr>
<form action="controls6.aspx" runat=server>
 <font face="Verdana">Please enter your name:
  <asp:textbox id="Name" runat=server/>
  <asp:button text="Enter" runat=server/>
  <p>
  <asp:label id="Message" forecolor="red" font-bold="true" runat=server/>
 </font>
</form>
</body>
</html>

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.