ASP.NET 2.0のWebおよびHTMLサーバコントロール

17276 ワード

コードとタグのほか、ASP.NET 2.0ページには、プログラム可能なサーバ側オブジェクトであり、典型的にはページ内のUI要素(テキストボックスや画像など)として表現されるサーバコントロールも含まれる.サーバコントロールは、ページの実行プロセスに参加し、クライアントに独自のタグレンダリングコンテンツを生成します.サーバコントロールの利点は、開発者が簡単な積み木式のコンポーネントから複雑なプレゼンテーション方式と操作行為を取得させ、動的Webページを生成するために必要なコード量を大幅に削減することである.もう1つの利点は、カスタマイズされたプレゼンテーションと動作が非常に簡単であることです.サーバコントロールが露出するプロパティは、宣言式(タグ内)またはプログラミング(コード内)で設定できます.サーバコントロール(およびページコントロール自体)は、開発者がこれらのイベントを処理したり、ページ実行中にサーバにページを返信するクライアント操作(Postback)に応答したりする際に必要な特定の操作を実行したりするイベントも暴露しています.サーバコントロールは、ステータス情報を保持する問題も簡略化し、複数の成功した「送り返し」操作の間で値を自動的に保持します.サーバコントロールは.aspxファイルでカスタムタグまたは固有のHTMLタグを使用して宣言され、runat=「server」プロパティ値が含まれています.固有のHTMLタグはSystem.Web.UI.HtmlControls名前空間のコントロールで処理されます.コントロールに明示的にマッピングするタグはSystemとして指定される.Web.UI.HtmlControls.HtmlGenericControlタイプ.次の例では、
およびの4つのサーバコントロールを使用します.これらのサーバコントロールは、実行時に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>


これらのサーバコントロールは、サーバ間を往復するクライアントが入力した値を自動的に保持することに注意してください.これらのコントロールステータスは、サーバに格納されるものではありません(リクエスト間を往復するフォームフィールドに格納されます).クライアント・スクリプトは必要ありません.標準的な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" OnClick="SubmitBtn_Click" runat="server"/>
  <p>
  <asp:label id="Message" runat="server"/>
  </form>
  </center>
  </body>
  </html>


この簡単な例は,前述した「Intro 3」の例の機能に相当する.この新しいサーバコントロールベースの例では、コードが非常に明確で簡単になっていることに注意してください.私たちは後でASPを見ます.NETページフレームワークコンポーネントにも多くのページ階層のイベントが露出しており、ページの処理中に特定の時間に実行されるコードを書くことができます.これらのイベントにはPage_が含まれています.LoadとPage_Render.
サーバコントロールASPを使用する.NETサーバコントロールは、runat=「server」属性を含む宣言タグを使用してページで定義されます.次の例では、3つのサーバコントロールを宣言し、各コントロールのテキストとスタイルプロパティを定義します.


            

  <html>
  <body>
  <h3><font face="Verdana">Declaring Server Controls</font></h3>
  This sample demonstrates how to declare the 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 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 server control within the "Click" event of a ,

and use its content to modify the text of a .
  <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" Onclick="EnterBtn_Click" runat=server/>
  <p>
  <asp:label id="Message" runat=server/>
  </font>
  </form>
  
  </body>
  </html>


複数のサーバイベントの処理
イベントハンドラはページ開発者用ASP.NETページで論理を構築することは、明確な方法を提供します.たとえば、次の例では、1ページで4つのボタンイベントを処理する方法を示します.


            

  <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 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="<<" OnClick="RemoveAllBtn_Click" runat=server/>
  <asp:button text="<" OnClick="RemoveBtn_Click" runat=server/>
  <asp:button text=">" OnClick="AddBtn_Click" runat=server/>
  <asp:button text=">>" OnClick="AddAllBtn_Click" runat=server/>
  </td>
  <td>
  <!-- Filler -->
  </td>
  </tr>
  </table>
  </form>
  </body>
     </html>


 
ページナビゲーションの実行(最初の場合)
実際のWebアプリケーションでは、複数のページ間のナビゲーションが一般的です.次の例では、コントロールを使用して別のページにナビゲートする方法を示します(カスタムクエリー文字列パラメータが渡されます).次に、この例では、ターゲットページでこれらのクエリー文字列パラメータを簡単に得る方法を示します.


            

  <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>


ページナビゲーションの実行(2つ目の場合)
すべてのページナビゲーションがクライアントのハイパーリンクによって開始されるわけではありません.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 click event,

passing a 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" Onclick="EnterBtn_Click" runat=server/>
    <p>
    <asp:label id="Message" forecolor="red" font-bold="true" runat=server/>
   </font>
  </form>
  </body>
  </html>