现在的位置: 首页 > 综合 > 正文

客户端控件在服务器上的设置与控制(客户端数据绑定)

2013年09月04日 ⁄ 综合 ⁄ 共 32590字 ⁄ 字号 评论关闭

 

默认情况下,ASP.NET 文件中的 HTML 元素被视为文本,并且页面开发人员不能以编程方式访问。若要使这些元素能够以编程方式访问,可以通过添加 runat="server" 属性,指示应将 HTML 元素作为服务器控件分析和处理。

唯一的 id 属性允许以编程方式引用该控件。属性用于声明服务器控件实例上的属性参数和事件绑定。

HTML 服务器控件必须驻留在具有 runat="server" 属性的包含 <form> 标记中。

ASP.NET 不要求文本(非动态的)HTML 内容的格式正确,但它确实要求所有 HTML 元素要正确结束(用一个后缀“/”或结束标记)和干净地嵌套(不允许出现重叠标记)。如果没有正确结束 HTML 元素,ASP.NET 将无法识别该元素。该元素将被忽略或者将发生编译错误,具体取决于该元素的构成方式。

可以用三种不同的方法创建任意“Web 窗体”控件的实例:作为 HTML 文档中的元素创建;在应用程序快速开发 (RAD) 环境中创建,该环境允许您将控件拖到页上;或以编程方式在代码声明块或代码隐藏文件中创建。

共享 HTML 控件属性
描述所有 HTML 服务器控件所共有的属性。
HtmlAnchor 控件
描述 HtmlAnchor 控件。HtmlAnchor 控件允许您以编程方式访问服务器上的 HTML <a> 标记。
HtmlButton 控件
描述 HtmlButton 控件。HtmlButton 控件允许您以编程方式访问服务器上的 HTML <button> 标记。
HtmlForm 控件
描述 HtmlForm 控件。HtmlForm 控件允许您以编程方式访问服务器上的 HTML <form> 标记。
HtmlGenericControl 控件
描述 HtmlGenericControl 控件。HtmlGenericControl 类允许您以编程方式访问不由特定的 .NET 框架类表示的 HTML 服务器控件标记,如 <span>、<div>、<body> 和 <font>。
HtmlImage 控件
描述 HtmlImage 控件。HtmlImage 控件允许您以编程方式访问服务器上的 HTML <img> 标记。
HtmlInputButton 控件
描述 HtmlInputButton 控件。HtmlInputButton 控件允许您以编程方式访问服务器上的 HTML <input type= button>、<input type= submit> 和 <input type= reset> 标记。
HtmlInputCheckBox 控件
描述 HtmlInputCheckBox 控件。HtmlInputCheckBox 控件允许您以编程方式访问服务器上的 HTML <input type= checkbox> 标记。
HtmlInputFile 控件
描述 HtmlInputFile 控件。HtmlInputFile 控件允许您以编程方式访问服务器上的 HTML <input type= file> 标记。
HtmlInputHidden 控件
描述 HtmlInputHidden 控件。HtmlInputHidden 控件允许您以编程方式访问服务器上的 HTML <input type=hidden> 标记。
HtmlInputImage 控件
描述 HtmlInputImage 控件。HtmlInputImage 控件允许您以编程方式访问服务器上的 HTML <input type= image> 标记。
HtmlInputRadioButton 控件
描述 HtmlInputRadioButton 控件。HtmlInputRadioButton 控件允许您以编程方式访问服务器上的 HTML <input type= radio> 标记。
HtmlInputText 控件
描述 HtmlInputText 控件。HtmlInputText 控件允许您以编程方式访问服务器上的 HTML <input type= text> 和 <input type= password> 标记。
HtmlSelect 控件
描述 HtmlSelect 控件。HtmlSelect 控件允许您以编程方式访问服务器上的 HTML <select> 标记。
HtmlTable 控件
描述 HtmlTable 控件。HtmlTable 控件允许您以编程方式访问服务器上的 HTML <table> 标记。
HtmlTableCell 控件
描述 HtmlTableCell 控件。HtmlTableCell 控件允许您以编程方式访问服务器上的 HTML <td> 和 <th> 标记。
HtmlTableRow 控件
描述 HtmlTableRow 控件。HtmlTableRow 控件允许您以编程方式访问服务器上的 HTML <tr> 标记。
HtmlTextArea 控件
描述 HtmlTextArea 控件。HtmlTextArea 控件允许您以编程方式访问服务器上的 HTML <textarea> 标记。


共享 HTML 控件属性

作为 .NET 框架的一部分,ASP.NET 共享命名空间和类之间的继承。有两个 HTML 控件的子集,它们共享不同基类的属性。这些子集称为容器控件和输入控件。有关继承和类层次结构的更多信息,请参阅 Web 窗体控件层次结构。

在 HTML 控件上声明的所有属性都被添加到该控件的 attribute 集合,并且可以像属性那样,以编程方式对其进行操作。例如,如果在 <body> 元素上声明 bgcolor 属性,则可以以编程方式访问该属性并编写事件处理程序以更改它的值。

所有 HTML 控件共享的属性
Attributes 获取在选定的 ASP.NET 页中的服务器控件标记上表示的所有属性名称和值对。
注意 在 Html 服务器控件中,操作 Attributes 集合与操作 ViewState 相同。
Disabled 获取或设置一个值,该值指示当 HTML 控件呈现在浏览器上时是否包含 disabled 属性。若包含该属性将使该控件成为只读控件。
Style 获取被应用于 .aspx 文件中的指定 HTML 服务器控件的所有级联样式表 (CSS) 属性。
TagName 获取包含 runat="server" 属性的标记的元素名。
Visible 获取或设置一个值,该值指示 HTML 服务器控件是否显示在页面上。

所有 HTML 输入控件共享的属性
HTML 输入控件映射到标准 HTML 输入元素。它们包含 type 属性,该属性定义它们在 Web 页中呈现的输入控件的类型。

HtmlInputText、HtmlInputButton、HtmlInputCheckBox、HtmlInputImage、HtmlInputHidden、HtmlInputFile 和 HtmlInputRadioButton 控件共享下列属性。

Name 获取或设置 HtmlInputControl 的唯一标识符名称。
Value 获取或设置与输入控件关联的值。
注意 与控件关联的值取决于该控件的上下文。例如,在允许输入文本的控件(如 HtmlInputText 控件)中,值为在控件中输入的文本。在不允许输入文本的控件(如 HtmlInputButton 控件)中,值为在该控件中显示的标题。有关 Value 属性的上下文的信息,请参考特定的控件。
Type 获取 HtmlInputControl 的类型。例如,如果将该属性设置为 text,则 HtmlInputControl 为用于数据输入的文本框。

所有 HTML 容器控件共享的属性
HTML 容器控件映射到 HTML 元素,这些元素需要具有开始和结束标记,如 <select>、<a>、<button> 和 <form> 元素。

HtmlTableCell、HtmlTable、HtmlTableRow、HtmlButton、HtmlForm、HtmlAnchor、HtmlGenericControl、HtmlSelect 和 HtmlTextArea 控件共享下列属性。

InnerHtml 获取或设置指定的 HTML 控件的开始和结束标记之间的内容。InnerHtml 属性不能自动地将特殊字符转换为 HTML 实体。例如,小于号字符 (<) 不转换为 &lt;。此属性通常用于将 HTML 元素嵌入到容器控件中。
InnerText 获取或设置指定的 HTML 控件的开始和结束标记之间的所有文本。与 InnerHTML 属性不同,InnerText 属性自动地将特殊字符转换为 HTML 实体。例如,小于号字符 (<) 转换为 &lt;。此属性通常在希望不必指定 HTML 实体即显示带有特殊字符的文本时使用。


HtmlAnchor 控件

创建一个服务器端控件,该控件映射到 <a> HTML 元素并允许您链接到其他 Web 页。

<a id="programmaticID"
   href="linkurl"
   name="bookmarkname"
   OnServerClick="onserverclickhandler"
   target="linkedcontentframeorwindow"
   title="titledisplayedbybrowser"
   runat="server" >
linktext
</a>
备注
使用 HtmlAnchor 控件以编程方式控制 <a> HTML 元素。可使用 <a> HTML 元素创建允许您移动到该页上的其他位置或其他 Web 页的超级链接。HtmlAnchor 控件必须使用带有开始和结束标记的正确格式。您可以通过将文本放置在开始和结束标记之间来指定控件标题。此服务器控件通常用于动态修改 <a> 元素的属性和属性,显示来自数据源的超级链接和控制事件以动态生成 HtmlAnchor 控件。

可以通过使用 Target 属性来指定显示新 Web 页的位置。除了以下划线开始的特殊值 _blank、_self、_parent 和 _top 外,Target 值必须以 a 到 z(不区分大小写)范围中的字母开头。

可以动态生成希望 HtmlAnchor 控件链接到的 URL。若要动态生成 HRef 属性,请在 HTML 文档中声明 HtmlAnchor 控件。例如:

<a id="anchor1" runat="server">
注意 请记住将 HtmlAnchor 控件嵌入 HtmlForm 控件的开始和结束标记中。
下一步,编写一个事件处理程序,向 HtmlControl 的 HRef 属性分配一个 URL。
虽然 HtmlAnchor 控件不直接支持绑定到数据源,但可以从数据源中的字段的值生成超级链接。首先将数据源绑定到列表控件,如 Repeater。然后在列表控件内部声明一个 HtmlAnchor 控件。最后添加 HRef 属性值的内联代码,使用 DataBinder 类的 Eval 方法指定要使用的字段。

示例
下面的示例说明当 Page_Load 事件发生时,如何动态地将 URL 与 HtmlAnchor 控件关联。

[Visual Basic]
Sub Page_Load(sender As Object, e As EventArgs)
   anchor1.HRef = "http://www.microsoft.com"
End Sub
[C#]
void Page_Load(object sender, EventArgs e)
{
   anchor1.HRef = "http://www.microsoft.com";
}
下面的示例说明如何将 HtmlAnchor 控件包含在 Repeater 控件中。将数据绑定到 Repeater 控件,并将 HtmlAnchor 控件放置在将数据源中的指定字段显示为超级链接的 ItemTemplate 中。

复制内容到剪贴板
代码:
<%@ Page Language="C#" %>
<%@ Import Namespace="System.Data" %>
<html>
<script runat="server">
   void Page_Load(Object sender, EventArgs e)
   {
      DataTable dt = new DataTable();
      DataRow dr;
      dt.Columns.Add(new DataColumn("IntegerValue", typeof(Int32)));
      dt.Columns.Add(new DataColumn("StringValue", typeof(string)));
      dt.Columns.Add(new DataColumn("DateTimeValue", typeof(DateTime)));
      dt.Columns.Add(new DataColumn("BoolValue", typeof(bool)));
      dt.Columns.Add(new DataColumn("CurrencyValue", typeof(double)));
      for (int i = 0; i < 9; i++)
      {
         dr = dt.NewRow();
         dr[0] = i;
         dr[1] = "Item " + i.ToString();
         dr[2] = DateTime.Now;
         dr[3] = (i % 2 != 0) ? true : false;
         dr[4] = 1.23 * (i+1);
         dt.Rows.Add(dr);
      }
      MyRepeater.DataSource=new DataView(dt);
      MyRepeater.DataBind();
   }
</script>
<body>
   <h3>Data Binding with the HtmlAnchor</h3>
   <p>
   <form runat=server>
      <asp:Repeater id="MyRepeater" runat="server">
         <ItemTemplate>
            Link for
            <a href='<%# DataBinder.Eval(Container,
                         "DataItem.StringValue",
                         "detailspage.aspx?id={0}") %>'
               runat="server">
               <%# DataBinder.Eval(Container, "DataItem.StringValue") %>
            </a>
            <p>
         </ItemTemplate>
      </asp:Repeater>
   </form>
</body>
</html>


HtmlButton 控件

创建一个服务器端控件,该控件映射到 <button> HTML 元素并允许您创建普通按钮。

<button id="programmaticID"
        OnServerClick="onserverclickhandler"
        runat="server" >
   buttontext, image, or control
</button>

备注
使用 HtmlButton 控件对 HTML <button> 元素进行编程。可以为 HtmlButton 控件的 ServerClick 事件提供自定义代码,以指定在单击该控件时执行的操作。

还可以自定义放置在 ASP.NET (.aspx) 页中的按钮的外观。HTML 4.0 <button> 元素使您能够创建由嵌入的 HTML 元素(甚至其他“Web 窗体”控件)组成的按钮。

注意 <button> 元素在 HTML 4.0 规范中定义。因此,仅在 Microsoft Internet Explorer 4.0 版及更高版本中支持 HtmlButton 控件。
修改 HtmlButton 控件的外观有多种方法。例如,可以在控件元素的开始标记中向按钮分配样式属性,可以在插入到控件的开始和结束标记之间的文本周围包含格式化元素,或者可以为客户端的 onmouseover 和 onmouseout 事件分配属性值更改。还可以在按钮元素自身内部包含图像,或甚至包含其他“Web 窗体”控件。

将样式添加到 HtmlButton 控件

在“Web 窗体”页上声明 HtmlButton 控件:
<button runat="server"> </button>
在该控件的开始标记中,包含样式属性并声明希望该按钮显示的样式。例如,开始标记中的下列代码定义控件的字体大小和样式、背景色、边框颜色、高度和宽度。
style="font: 8pt verdana;background-color:lightgreen;border-color:black;height=30;width:100"
在 HtmlButton 控件中包含 DHTML 事件

在“Web 窗体”页上声明 HtmlButton 控件:
<button runat="server"> </button>
在该控件的开始标记中,包含希望为响应用户的行为而在浏览器上发生的 DHTML 事件。例如,当用户在控件上移动鼠标指针时,下列代码将导致控件的背景色更改为淡绿色。
mouseover="this.style.backgroundColor='lightgreen'"
在 HtmlButton 控件中包含格式化的文本、图像或其他“Web 窗体”控件

在“Web 窗体”页上声明 HtmlButton 控件:
<button runat="server"> </button>
用控件的开始和结束标记之间的格式化标记声明文本。例如,在控件的开始和结束标记之间包含 <b>Click Me!</b> 以用粗体显示控件文本。
在控件的开始和结束标记之间,包含希望显示的图像或控件的标记。例如,包含 <img src="/images/MyImage.gif"> 以显示存储在应用程序的图像目录中的 MyImage.gif 文件。
注意 请参阅希望在 HtmlButton 控件中包含的控件的控件语法。

示例
下面的示例显示本主题中描述的过程。它还包含两个简单事件处理程序的代码,这些处理程序通过由 <span> 元素创建的 HtmlGenericControl 的实例显示消息。

复制内容到剪贴板
代码:
[Visual Basic]
<%@ Page Language="VB" %>
<html>
<head>
   <script runat="server">
      Sub Button1_OnClick(Source As Object, e As EventArgs)
         Span1.InnerHtml = "You clicked Button1"
      End Sub
      Sub Button2_OnClick(Source As Object, e As EventArgs)
         Span1.InnerHtml = "You clicked Button2"
      End Sub
   </script>
</head>
<body>
   <h3>HtmlButton Sample</h3>
   <form runat="server">
      <p>
      <button id="Button1"
              OnServerClick="Button1_OnClick"
              style="font: 8pt verdana;
                    background-color:lightgreen;
                    border-color:black;
                    height=30;
                    width:100"
              runat="server">
          <img src="/quickstart/aspplus/images/right4.gif"> Click me!
       </button>
       &nbsp;With embedded &lt;img&gt; tag
       <p>
       <p>
       <button id=Button2
               OnServerClick="Button2_OnClick"
               style="font: 8pt verdana;
                      background-color:lightgreen;
                      border-color:black;
                      height=30;
                      width:100"
               onmouseover="this.style.backgroundColor='yellow'"
               onmouseout="this.style.backgroundColor='lightgreen'"
               runat="server">
          Click me too!
       </button>
       &nbsp;With rollover effect
       <p>        
       <p>
       <span id=Span1 runat="server" />
   </form>
</body>
</html>
[C#]
<%@ Page Language="C#" %>
<html>
<head>
   <script runat="server">
      void Button1_OnClick(object Source, EventArgs e)
      {
         Span1.InnerHtml="You clicked Button1";
      }
      void Button2_OnClick(object Source, EventArgs e)
      {
         Span1.InnerHtml="You clicked Button2";
      }
   </script>
</head>
<body>
   <h3>HtmlButton Sample</h3>
   <form runat="server">
      <p>
      <button id="Button1"
              OnServerClick="Button1_OnClick"
              style="font: 8pt verdana;
                    background-color:lightgreen;
                    border-color:black;
                    height=30;
                    width:100"
              runat="server">
          <img src="/quickstart/aspplus/images/right4.gif"> Click me!
       </button>
       &nbsp;With embedded &lt;img&gt; tag
       <p>
       <p>
       <button id=Button2
               OnServerClick="Button2_OnClick"
               style="font: 8pt verdana;
                      background-color:lightgreen;
                      border-color:black;
                      height=30;
                      width:100"
               onmouseover="this.style.backgroundColor='yellow'"
               onmouseout="this.style.backgroundColor='lightgreen'"
               runat="server">
          Click me too!
       </button>
       &nbsp;With rollover effect
       <p>        
       <p>
       <span id=Span1 runat="server" />
   </form>
</body>
</html>


HtmlForm 控件

创建一个服务器端控件,该控件映射到 <form> HTML 元素并允许您为 Web 页中的元素创建一个容器。

ASP.NET 语法
<form id="programmaticID"
      method=POST | GET
      action="srcpageURL"
      runat="server" >
   Other controls, input forms, and so on.
</form>
备注
使用 HtmlForm 控件对 HTML <form> 元素进行编程。若要利用回发服务,则所有“Web 窗体”控件(无论这些控件是 HTML、Web、pagelet 还是自定义的)都必须嵌套在 HtmlForm 控件的格式正确的开始和结束标记之间。如果没有正确结束标记,ASP.NET 将无法识别该元素。该元素将被忽略或者将发生编译错误,具体取决于该元素的构成方式。

注意 不能在单个“Web 窗体”页上包含多个 HtmlForm 控件。
默认情况下,将 HtmlForm 控件的 method 属性设置为 POST。您可以根据需要自定义 method 属性,但如果将 method 属性设置为 GET 或 POST 以外的值,则可能破坏内置视图状态并回送“Web 窗体”提供的服务。

注意 action 属性总是设置为页本身的 URL。无法更改 action 属性;因此,只能向页本身回送。
示例
下面的示例显示三个 HtmlButton 控件,其中每个按钮都有一个单独的 OnServerClick 事件处理程序。这些事件中的每个事件都导致向服务器回送(在发生回送的所有方案中都需要 HtmlForm 控件)。此例还说明在一个“Web 窗体”页上只允许有一个 HtmlForm 控件(包括支持多个事件的窗体)。如果包含多个 HtmlForm 控件,.NET 框架将引发异常。

复制内容到剪贴板
代码:
[Visual Basic]
<%@ Page Language="VB" %>
<html>
<head>
   <script runat="server">
      Sub Button1_OnClick(Source As Object, e As EventArgs)
         Span1.InnerHtml = "You clicked Button1"
      End Sub
      Sub Button2_OnClick(Source As Object, e As EventArgs)
         Span2.InnerHtml = "You clicked Button2"
      End Sub
      Sub Button3_OnClick(Source As Object, e As EventArgs)
         Span3.InnerHtml = "You clicked Button3"
      End Sub
   </script>
</head>
<body>
   <h3>HtmlForm Sample</h3>
   <form id="ServerForm" runat="server">     
      <button id=Button1 runat="server"
              OnServerClick="Button1_OnClick">
         Button1
      </button>
      &nbsp;&nbsp;
      <span id=Span1 runat="server" />
      <p>
      <button id=Button2 runat="server"
              OnServerClick="Button2_OnClick">
         Button2
      </button>
      &nbsp;&nbsp;
      <span id=Span2 runat="server" />
      <p>
      <button id=Button3 runat="server"
              OnServerClick="Button3_OnClick">
         Button3
      </button>
      &nbsp;&nbsp;
      <span id=Span3 runat="server" />
   </form>
</body>
</html>
[C#]
<%@ Page Language="C#" %>
<html>
<head>
    <script runat="server">
       void Button1_OnClick(object Source, EventArgs e)
       {
          Span1.InnerHtml="You clicked Button1";
       }
       void Button2_OnClick(object Source, EventArgs e)
       {
          Span2.InnerHtml="You clicked Button2";
       }
       void Button3_OnClick(object Source, EventArgs e)
       {
          Span3.InnerHtml="You clicked Button3";
       }
    </script>
</head>
<body>
   <h3>HtmlForm Sample</h3>
   <form id="ServerForm" runat="server">     
      <button id=Button1 runat="server"
              OnServerClick="Button1_OnClick">
         Button1
      </button>
      &nbsp;&nbsp;
      <span id=Span1 runat="server" />
      <p>
      <button id=Button2 runat="server"
              OnServerClick="Button2_OnClick">
         Button2
      </button>
      &nbsp;&nbsp;
      <span id=Span2 runat="server" />
      <p>
      <button id=Button3 runat="server"
              OnServerClick="Button3_OnClick">
         Button3
      </button>
      &nbsp;&nbsp;
      <span id=Span3 runat="server" />
   </form>
</body>
</html>


HtmlGenericControl控件

创建服务器端控件,该控件映射到不由特定的 .NET 框架类表示的 HTML 元素(如 <body> 和 <div>)。

<span | body | div | font | others
      id="programmaticID"
      runat="server" >
   Contentbetweentags
</span | body | div | font | others>
备注
在服务器上创建,以响应在不直接映射到特定 HTML 控件的元素中包含 runat="server" 属性/值对的标记。这些元素包括 <span>、<body>、<div> 和 <font> 元素等。该控件通过 TagName 属性将用作 HTML 控件的特定元素的标记名映射到 ASP.NET。此控件从 HtmlContainerControl 类继承功能,该类允许您动态地更改 HTML 控件标记的内部内容。

可以使用服务器端 <span> 元素显示由事件处理程序代码生成(通过用户输入或从在事件处理程序中指定的源)的文本。还可以使用 Page_Load 事件生成 span 控件中的文本和 HTML 样式属性,以便当在浏览器中显示文本时将文本格式化。

使用 <span> 元素从用户输入中动态生成页上的文本

声明页上的服务器端 span 控件并向它分配 id 属性以允许对控件进行编程访问。
<span id="MySpan" runat="server" />
声明 HtmlInputText 控件并向其分配 id 属性以允许对该控件进行编程访问。
<input type="text" id="myText" runat="server">
声明 HtmlInputButton 控件并向其分配 id 属性以允许对该控件进行编程访问。还应声明 OnServerClick 事件处理程序以指定在单击按钮时要执行的操作。
<input type="submit" Value="Click Here!"
       OnServerClick="SubmitBtn_Click" runat="server">
创建事件处理程序代码,该代码操作用户在文本框中输入的值以通过 span 控件显示它。此代码可以放置在代码隐藏文件中的页上的任意位置。
[Visual Basic]
Sub SubmitBtn_Click(sender As Object, e As EventArgs)
   MySpan.InnerHtml = myText.Value
End Sub
[C#]
void SubmitBtn_Click(object sender, EventArgs e)
{
   MySpan.InnerHtml = myText.Value;
}
示例
下面的示例显示可以如何基于 HtmlInputText 控件中的用户输入生成要显示的文本。通过在页上声明 <span> 元素创建的 HtmlGenericControl 为 <span> 元素提供对 InnerHtml 属性的访问。这使您可以操作分配给 <span> 元素的文本字符串。

复制内容到剪贴板
代码:
[Visual Basic]
<%@ Page Language="VB" %>
<html>
<head>
   <script runat="server">
      Sub SubmitBtn_Click(Source As Object, e As EventArgs)
         MySpan.InnerHtml = "Welcome to ASP.NET, " & myText.Value & "."
      End Sub
   </script>
</head>
<body>
   <form id="myForm" runat="server">
   <p>Enter your name here:
   <input type="text" id="myText" runat="server">
   <br><br>
   <input type="submit" Value="Click Here!"
          OnServerClick="SubmitBtn_Click" runat="server">
   <br><br>
   <b><span id="MySpan" runat="server"/><b>
   </form>
</body>
</html>
[C#]
<%@ Page Language="C#" %>
<html>
<head>
   <script runat="server">
      void SubmitBtn_Click(object Source, EventArgs e)
      {
         MySpan.InnerHtml = "Welcome to ASP.NET, " + myText.Value + ".";
      }
   </script>
</head>
<body>
   <form id="myForm" runat="server">
   <p>Enter your name here:
   <input type="text" id="myText" runat="server">
   <br><br>
   <input type="submit" Value="Click Here!"
          OnServerClick="SubmitBtn_Click" runat="server">
   <br><br>
   <b><span id="MySpan" runat="server"/><b>
   </form>
</body>
</html>
下面的示例显示可以如何使用 HtmlGenericControl 以允许用户修改页的背景色。它还显示如何使用 AttributeCollection 类以编程方式访问可在任何 HTML 控件上声明的属性。
[Visual Basic]
<%@ Page Language="VB" %>
<html>
<head>
   <script runat="server">
      Sub SubmitBtn_Click(Source As Object, e As EventArgs)
         Body.Attributes("bgcolor") = ColorSelect.Value
      End Sub
   </script>
</head>
<body id=Body runat="server">
   <h3>Updating Styles with the HtmlGenericControl</h3>
   <form runat="server">
      <p>
      Select a background color for the page: <p>
      <select id="ColorSelect" runat="server">
         <option>White</option>
         <option>Wheat</option>
         <option>Gainsboro</option>
         <option>LemonChiffon</option>
      </select>
      <input type="submit" runat="server"
             Value="Apply" OnServerClick="SubmitBtn_Click">
   </form>
</body>
</html>
[C#]
<%@ Page Language="C#" %>
<html>
<head>
   <script runat="server">
      void SubmitBtn_Click(object Source, EventArgs e)
      {
         Body.Attributes["bgcolor"] = ColorSelect.Value;
      }
   </script>
</head>
<body id=Body runat="server">
   <h3>Updating Styles with the HtmlGenericControl</h3>
   <form runat="server">
      <p>
      Select a background color for the page: <p>
      <select id="ColorSelect" runat="server">
         <option>White</option>
         <option>Wheat</option>
         <option>Gainsboro</option>
         <option>LemonChiffon</option>
      </select>
      <input type="submit" runat="server"
             Value="Apply" OnServerClick="SubmitBtn_Click">
   </form>
</body>
</html>


HtmlImage 控件

创建服务器端控件,该控件映射到 <img> HTML 元素并允许您显示图像。

<img id="programmaticID"
     alt="alttext"
     align= top | middle | bottom | left | right
     border="borderwidth"
     height="imageheight"
     src="imageURL"
     width="imagewidth"   
     runat="server" >
备注
使用 HtmlImage 控件对 HTML <img> 元素进行编程。此控件使您可以通过使用 Src、Width、Height、Border、Alt 和 Align 属性,分别动态地设置和检索图像的源、宽度、高度、边框宽度、替换文本和对齐方式。

注意 此控件不需要结束标记。
示例
下面的示例显示如何基于用户选择更改显示的图像。它将 /images 目录指定为要显示的图像的源路径。在“Web 窗体”页的 HtmlSelect 控件中选定的值确定要显示 /images 目录中的哪个图像。

复制内容到剪贴板
代码:
[Visual Basic]
<%@ Page Language="VB" %>
<html>
<head>
   <script runat="server">
      Sub SubmitBtn_Click(Sender As Object, e As EventArgs)
         Image1.Src = "/images/" & Select1.Value
      End Sub
   </script>
</head>
<body>
   <h3>HtmlImage Sample</h3>
   <form runat="server">
      <img ID="Image1" src="/images/cereal1.gif" runat="server"/>
      <p>
      <p>
      Select an image file to display:
      <select id="Select1" runat="server">
         <option Value="Cereal1.gif">Healthy Grains</option>
         <option Value="Cereal2.gif">Corn Flake Cereal</option>
         <option Value="Cereal3.gif">U.F.O.S</option>
         <option Value="Cereal4.gif">Oatey O's</option>
         <option Value="Cereal5.gif">Strike</option>
         <option Value="Cereal7.gif">Fruity Pops</option>
       </select>
       <p>
       <p>
       <input type="submit" runat="server" Value="Apply"
              OnServerClick="SubmitBtn_Click">
   </form>
</body>
</html>
[C#]
<%@ Page Language="C#" %>
<html>
<head>
    <script runat="server">
       void SubmitBtn_Click(Object Sender, EventArgs e)
       {
          Image1.Src="/images/" + Select1.Value;
       }
    </script>
</head>
<body>
   <h3>HtmlImage Sample</h3>
   <form runat="server">
      <img ID="Image1" src="/images/cereal1.gif" runat="server"/>
      <p>
      <p>
      Select an image file to display:
      <select id="Select1" runat="server">
         <option Value="Cereal1.gif">Healthy Grains</option>
         <option Value="Cereal2.gif">Corn Flake Cereal</option>
         <option Value="Cereal3.gif">U.F.O.S</option>
         <option Value="Cereal4.gif">Oatey O's</option>
         <option Value="Cereal5.gif">Strike</option>
         <option Value="Cereal7.gif">Fruity Pops</option>
       </select>
       <p>
       <p>
       <input type="submit" runat="server" Value="Apply"
              OnServerClick="SubmitBtn_Click">
   </form>
</body>
</html>


HtmlInputButton 控件

创建一个服务器端控件,该控件映射到 <input type=button>、<input type=submit> 和 <input type=reset> HTML 元素,并允许您分别创建命令按钮、提交按钮或重置按钮。

<input type=button | submit | reset
       id="programmaticID"
       OnServerClick="onserverclickhandler"
       runat="server" >
备注
使用 HtmlInputButton 控件对 <input type=button>、<input type=submit> 和 <input type=reset> HTML 元素进行编程。用户单击 HtmlInputButton 控件时,来自嵌有该控件的窗体的输入被发送到服务器并得到处理。然后,将响应发送回请求浏览器。

通过为 ServerClick 事件提供自定义事件处理程序,可以在单击控件时执行特定的指令集。

注意 “重置”按钮不支持 ServerClick 事件。单击“重置”按钮时,未必清除页上的所有输入控件。相反,在加载页时,它们返回到它们的原始状态。例如,如果文本框最初包含值 "JohnDoe",则单击“重置”按钮会使文本框返回到该值。
与 HtmlInputText 和 HtmlTextArea 控件一起使用时,可创建可以在服务器上处理的用户输入页或身份验证页。

注意 此控件不需要结束标记。
示例
下面的示例说明简单事件处理程序的一些有用的示例。该文件通过将用户输入的文本与 HTML 文档顶部的事件处理程序代码中包含的文本进行比较来处理身份验证方案。HTML 页的体包含一个 HtmlForm 控件,该控件中又包含两个 HtmlInputText 控件、两个 HtmlInputButton 控件和一个 HtmlGenericControl。第一个输入文本控件是一个简单的文本框,而第二个输入文本控件为密码框。两个按钮分别是“提交”和“重置”。通用控件为 <span> 元素,它显示由事件处理程序代码指定的适当消息。

当用户单击“提交”按钮时,SubmitBtn_Click 事件处理程序可通过两种方式使用条件循环作出响应。首先,如果用户在“名称”文本框中输入 JohnDoe,在“密码”文本框中输入 GoldFish,然后单击“提交”按钮,则服务器向 span 控件发送响应消息“已验证您的身份!”。如果用户输入除此之外的名称或密码,Web 页将在 span 控件中显示“错误的用户名或密码”。

复制内容到剪贴板
代码:
[Visual Basic]
<%@ Page Language="VB" %>
<html>
   <script runat="server">
      Sub SubmitBtn_Click(sender As Object, e as EventArgs)
         If (Name.Value = "JohnDoe") And _
            (Password.Value = "GoldFish") Then
            Message.InnerHtml = "You are authenticated"
         Else
            Message.InnerHtml = "Incorrect user name or password."
         End If
      End Sub     
   </script>
   <body>
         <form method=post runat="server">
             Enter Name:
             <input id="Name"
                    type=text size=40 runat="server">
             Enter Password:
             <input id="Password"
                    type=password size=40 runat="server">
             <input type=submit value="Enter"
                    OnServerClick="SubmitBtn_Click" runat="server">
             <input type=reset
                    runat="server">
             <h1>
             <span id="Message" runat="server"> </span>
             </h1>
         </form>
   </body>
</html>
[C#]
<%@ Page Language="C#" %>
<html>
   <script runat="server">
      void SubmitBtn_Click(Object sender, EventArgs e)
      {
         if (Name.Value == "JohnDoe" && Password.Value == "GoldFish")
            Message.InnerHtml = "You are authenticated";
         else
            Message.InnerHtml = "Incorrect user name or password.";
      }
   </script>
   <body>
         <form method=post runat="server">
             Enter Name:
             <input id="Name"
                    type=text size=40 runat="server">
             Enter Password:
             <input id="Password"
                    type=password size=40 runat="server">
             <input type=submit value="Enter"
                    OnServerClick="SubmitBtn_Click" runat="server">
             <input type=reset
                    runat="server">
             <h1>
             <span id="Message" runat="server"> </span>
             </h1>
         </form>
   </body>
</html>


HtmlInputCheckBox 控件

创建服务器端控件,该控件映射到 <input type=checkbox> HTML 元素并允许您创建使用户可以选择 true 或 false 状态的复选框控件。

<input type=checkbox
       id="programmaticID"
       checked
       runat="server" >
备注
使用 HtmlInputCheckBox 控件对 <input type=checkbox> HTML 元素进行编程。单击 HtmlInputCheckBox 控件时,该控件不会向服务器回送。当使用回送服务器的控件(如 HtmlInputButton 控件)时,复选框的状态被发送到服务器进行处理。若要确定是否选择了复选框,请测试控件的 Checked 属性。

注意 此控件不需要结束标记。
示例
下面的示例说明如何创建 HtmlInputCheckBox 控件以允许用户选择 true 或 false 状态。当用户单击页上包含的输入按钮时,Button1_Click 事件处理程序确定是否选中了 HtmlInputCheckBox 控件。然后,它在 <span> 控件中显示一个消息。请注意,即使此例中在默认情况下将选中的值设置为 true,用户仍然需要单击 Button1 以显示该文本。

复制内容到剪贴板
代码:
[Visual Basic]
<%@ Page Language="VB" %>
<html>
<head>
   <script runat="server">
      Sub Button1_Click(Source As Object, e As EventArgs)
         If Check1.Checked = True Then
            Span1.InnerHtml = "Check1 is checked!"
         Else
            Span1.InnerHtml = "Check1 is not checked!"
         End If
      End Sub
   </script>
</head>
<body>
    <h3>HtmlInputCheckBox Sample</h3>
    <form runat="server">
        <input id="Check1" type=checkbox runat="server" checked/>
            CheckBox1 &nbsp;&nbsp;
        <span id=Span1 style="color:red" runat="server" />
        <p>
        <input type=button id="Button1" value="Enter"
               OnServerClick="Button1_Click" runat="server"/>
    </form>
</body>
</html>
[C#]
<%@ Page Language="C#" %>
<html>
<head>
    <script runat="server">
       void Button1_Click(object Source, EventArgs e)
       {
          if (Check1.Checked == true)
          {
             Span1.InnerHtml = "Check1 is checked!";
          }
          else
          {
             Span1.InnerHtml = "Check1 is not checked!";
          }
       }
    </script>
</head>
<body>
    <h3>HtmlInputCheckBox Sample</h3>
    <form runat="server">
        <input id="Check1" type=checkbox runat="server" checked/>
            CheckBox1 &nbsp;&nbsp;
        <span id=Span1 style="color:red" runat="server" />
        <p>
        <input type=button id="Button1" value="Enter"
               OnServerClick="Button1_Click" runat="server"/>
    </form>
</body>
</html>


HtmlInputFile 控件

创建一个服务器端控件,该控件映射到 <input type=file> HTML 元素并允许您将文件上载到服务器上。
<input type=file
       id="programmaticID"
       accept="MIMEencodings"
       maxlength="maxfilepathlength"
       size="widthoffilepathtextbox"
       postedfile="uploadedfile"
       runat="server" >
备注
使用 HtmlInputFile 控件对 HTML <input type=file> 元素进行编程。可以使用 HtmlInputFile 控件方便地设计页,该页允许用户将二进制文件或文本文件从浏览器上载到在 Web 服务器上指定的目录中。所有 HTML 3.2 和更高版本的 Web 浏览器都允许进行文件上载。

示例
下面的示例说明一个简单的文件上载方案。第一部分代码定义该页的事件处理程序。当用户单击窗体上的“上载”按钮时,将在该页上显示文件名、内容长度和内容数量(以字节为单位),而文件本身则被上载到服务器上的 UploadedFiles 目录。

注意 必须将窗体的 enctype 属性设置为 "multipart/form-data"。
窗体的代码实现一个 HtmlForm 控件、一个 HtmlInputFile 控件、一个 HtmlInputButton 控件和四个 HtmlGenericControls(<div> 元素和三个 <span> 元素,每个元素的开始标记中都有 runat="server" 属性/值对)。

注意 若要查看有关该页上的上载文件的信息,必须在事件处理程序代码中将 Visible 属性(它是 HtmlGenericControl 从控件类继承的)设置为 true。

复制内容到剪贴板
代码:
[Visual Basic]
<%@ Page Language="VB" %>
<html>
   <script runat="server">
      Sub UploadBtn_Click(Sender as Object, e as EventArgs)
         ' Display information about posted file
         FileName.InnerHtml = MyFile.PostedFile.FileName
         MyContentType.InnerHtml = MyFile.PostedFile.ContentType
         ContentLength.InnerHtml = cStr(MyFile.PostedFile.ContentLength)
         FileDetails.Visible = True
         ' Save uploaded file to server
         MyFile.PostedFile.SaveAs("c:/Uploadedfiles/uploadfile.txt")
      End Sub
   </script>
   <body>
      <form action="fileupload.aspx"
            method="post"
            enctype="multipart/form-data"
            runat="server">
         <h1>ASP.NET File Upload Example</h1>
         Select File To Upload to Server:
         <input id="MyFile"
                type="file"
                runat="server">
         <br><br>
         <input type=submit
                value="Upload!"
                OnServerclick="UploadBtn_Click"
                runat="server">
         <br><br><br>
         <div id="FileDetails"
              Visible=false
              runat="server">
            FileName: <span id="FileName" runat="server"/> <br>
            ContentType: <span id="MyContentType" runat="server"/> <br>
            ContentLength: <span id="ContentLength" runat="server"/>bytes
            <br>
         </div>
      </form>
   </body>
</html>
[C#]
<%@ Page Language="C#" %>
<html>
   <script runat="server">
      void UploadBtn_Click(Object sender, EventArgs e)
      {
         // Display information about posted file
         FileName.InnerHtml = MyFile.PostedFile.FileName;
         MyContentType.InnerHtml = MyFile.PostedFile.ContentType;
         ContentLength.InnerHtml =
                               MyFile.PostedFile.ContentLength.ToString();
         FileDetails.Visible = true;
         // Save uploaded file to server
         MyFile.PostedFile.SaveAs("c://Uploadedfiles//uploadfile.txt");
      }
   </script>
   <body>
      <form action="fileupload.aspx"
            method="post"
            enctype="multipart/form-data"
            runat="server">
         <h1>ASP.NET File Upload Example</h1>
         Select File To Upload to Server:
         <input id="MyFile"
                type="file"
                runat="server">
         <br><br>
         <input type=submit
                value="Upload!"
                OnServerclick="UploadBtn_Click"
                runat="server">
         <br><br><br>
         <div id="FileDetails"
              Visible=false
              runat="server">
            FileName: <span id="FileName" runat="server"/> <br>
            ContentType: <span id="MyContentType" runat="server"/> <br>
            ContentLength: <span id="ContentLength" runat="server"/>bytes
            <br>
         </div>
      </form>
   </body>
</html>


HtmlInputHidden 控件

创建一个服务器端控件,该控件映射到 <input type=hidden> HTML 元素并允许您将信息存储在窗体上不可查看的控件中。

<input type="hidden"
       id="programmaticID"
       value="contentsofhiddenfield"
       runat="server" >
备注
使用 HtmlInputHidden 控件对 <input type=hidden> HTML 元素进行编程。尽管此控件是窗体的一部分,但它永远不在窗体上显示。由于在 HTML 中不保持状态,此控件通常与 HtmlInputButton 和 HtmlInputText 控件一起使用,以在对服务器的发送之间存储信息。

注意 此控件不需要结束标记。
示例
下面的示例说明如何使用 HtmlInputHidden 控件跨请求保存视图状态信息。<span> 控件显示存储在与当前请求紧邻的前一个 Web 请求的隐藏字段中的文本。

有两个事件处理程序。第一个事件在页被回送到服务器时发生。该事件处理程序获取存储在前一个发送请求的隐藏字段中的文本,并将其显示在 <span> 控件中。第二个事件在单击“提交”按钮时发生。该事件处理程序获取文本框的内容,并将它存储在 Web 页上的隐藏字段中。

复制内容到剪贴板
代码:
[Visual Basic]
<%@ Page Language="VB" %>
<html>
<head>
    <script runat="server">
      Sub Page_Load(Source As Object, e As EventArgs)
         If Page.IsPostBack Then
            Span1.InnerHtml = "Hidden value: <b>" + HiddenValue.Value + "</b>"
         End If
      End Sub
      Sub SubmitBtn_Click(Source As Object, e As EventArgs)
         HiddenValue.Value = StringContents.Value
      End Sub
    </script>
</head>
<body>
    <h3>HtmlInputHidden Sample</h3>
    <form runat="server">
        <input id="HiddenValue"
               type=hidden value="Initial Value" runat="server">
        Enter a string:
        <input id="StringContents" type=text size=40 runat="server">
        <p>
        <input type=submit value="Enter"
               OnServerClick="SubmitBtn_Click" runat="server">
        <p>
        <span id=Span1 runat="server">
           This label will display the previously entered text.
        </span>
    </form>
</body>
</html>
[C#]
<%@ Page Language="C#" %>
<html>
<head>
    <script runat="server">
       void Page_Load(object Source, EventArgs e)
       {
          if (Page.IsPostBack)
          {
             Span1.InnerHtml="Hidden value: <b>" +
                             HiddenValue.Value + "</b>";
          }
       }
       void SubmitBtn_Click(object Source, EventArgs e)
       {
          HiddenValue.Value=StringContents.Value;
       }
    </script>
</head>
<body>
    <h3>HtmlInputHidden Sample</h3>
    <form runat="server">
        <input id="HiddenValue"
               type=hidden value="Initial Value" runat="server">
        Enter a string:
        <input id="StringContents" type=text size=40 runat="server">
        <p>
        <input type=submit value="Enter"
               OnServerClick="SubmitBtn_Click" runat="server">
        <p>
        <span id=Span1 runat="server">
           This label will display the previously entered text.
        </span>
    </form>
</body>
</html>


HtmlInputImage 控件

创建一个服务器端控件,该控件映射到 <input type=image> HTML 元素并允许您创建显示图像的按钮。
<input type=image
       id="programmaticID"
       src="imagepath"
       align="imagealignment"
       alt="alttext"
       OnServerClick="onserverclickhandler"
       width="borderwidthinpixels"
       runat="server" >
备注
使用 HtmlInputImage 控件对 HTML <input type=image> 元素进行编程。可以将此控件与 HtmlInputText、HtmlTextArea 及其他控件一起使用以构造用户输入窗体。因为此控件是在服务器上运行的 <input type=image> 元素,所以它提供与 HTML 相同的按钮自定义。此控件可以替代不支持 DHTML 和 HtmlButton 控件的浏览器。

注意 此控件不需要结束标记。

HTML 控件相对于 Web 控件的优点之一是:服务器端事件不与在客户端发生的事件冲突,除非服务器和客户端的代码本身彼此取消。这样,您就可以使用动态 HTML (DHTML) 事件修改在“Web 窗体”页上包含的任何图像的外观。

示例
下面的示例将静态图像按钮 (ImageButton) 控件与另一个图像按钮 (ImageButton) 控件进行比较,后者使用 DHTML onMouseOver 事件(该事件显示香蕉图像)和 onMouseOut 事件(该事件显示原始的芒果图像)。两个图像按钮都包含一个 OnServerClick 事件处理程序。

复制内容到剪贴板
代码:
[Visual Basic]
<%@ Page Language="VB" %>
<html>
<head>
   <script runat="server">
      Sub Button1_Click(Source As Object, e As ImageClickEventArgs)
         Span1.InnerHtml = "You clicked button1"
      End Sub
      Sub Button2_Click(Source As Object, e As ImageClickEventArgs)
         Span1.InnerHtml = "You clicked button2"
      End Sub
   </script>
</head>
<body>
    <h3>HtmlInputImage Sample</h3>
    <form runat="server">
        <input type=image
               id="InputImage1"
               src="/images/mango.jpg"
               OnServerClick="Button1_Click"
               runat="server">
        <p>
        <input type=image
               id="InputImage2"
               src="/images/mango.jpg"
               onmouseover="this.src='/images/banana.jpg';"
               onmouseout="this.src='/images/mango.jpg';"
               OnServerClick="Button2_Click"
               runat="server">
        &nbsp;With rollover effect (HTML 4.0)
        <p>
        <span id=Span1 runat="server" />
    </form>
</body>
</html>
[C#]
<%@ Page Language="C#" %>
<html>
<head>
   <script runat="server">
      void Button1_Click(object Source, ImageClickEventArgs e)
      {
         Span1.InnerHtml="You clicked button1";
      }
      void Button2_Click(object Source, ImageClickEventArgs e)
      {
         Span1.InnerHtml="You clicked button2";
      }
   </script>
</head>
<body>
    <h3>HtmlInputImage Sample</h3>
    <form runat="server">
        <input type=image
               id="InputImage1"
               src="/images/mango.jpg"
               OnServerClick="Button1_Click"
               runat="server">
        <p>
        <input type=image
               id="InputImage2"
               src="/images/mango.jpg"
               onmouseover="this.src='/images/banana.jpg';"
               onmouseout="this.src='/images/mango.jpg';"
               OnServerClick="Button2_Click"
               runat="server">
        &nbsp;With rollover effect (HTML 4.0)
        <p>
        <span id=Span1 runat="server" />
    </form>
</body>
</html>


HtmlInputText 控件

创建一个服务器端控件,该控件映射到 <input type=text> 和 <input type=password> HTML 元素,并允许您创建单行文本框以接收用户输入。

<input type=text | password
       id="programmaticID"
       maxlength="max#ofcharacters"
       size="widthoftextbox"
       value="defaulttextboxcontents"
       runat="server" >
备注
使用 HtmlInputText 控件对 <input type=text> 和 <input type=password> HTML 元素运行服务器代码。与标准 HTML 一样,这些控件可用于在 HTML 窗体中输入用户名和密码。

注意 当 Type 属性设置为 password 时,输入被在文本框中屏蔽。
可以将此控件与 HtmlInputButton、HtmlInputImage 或 HtmlButton 控件一起使用以在服务器上处理用户输入。通过使用 MaxLength、Size 和 Value 属性,可以分别控制可输入的字符数、控件宽度和控件内容。

注意 此控件不需要结束标记。
示例
下面的示例说明如何创建简单的身份验证方案。此例使用“Web 窗体”页上文本框中的两个值。更高级的方案是针对存储在数据库中的值验证输入的文本。还可以将文本框与验证控件结合使用,以验证用户是否正在文本框中输入正确的信息。

复制内容到剪贴板
代码:
[Visual Basic]
<%@ Page Language="VB" %>
<html>
   <script runat="server">
      Sub SubmitBtn_Click(sender As Object, e as EventArgs)
         If (Name.Value = "UserID") And _
            (Password.Value = "GoldFish") Then
            Message.InnerHtml = "You are authenticated!"
         Else
            Message.InnerHtml = "Login Failed!"
         End If
      End Sub
</script>
<body>
   <form method=post runat="server">
      <h3>Enter Name:
      <input id="Name" type=text size=40 runat="server">
      <h3>Enter Password:
      <input id="Password" type=password size=40 runat="server">
      <input type=submit value="Enter"
             OnServerClick="SubmitBtn_Click" runat="server">
      <h1>
         <span id="Message" runat="server"> </span>
      </h1>
   </form>
</body>
</html>
[C#]
<%@ Page Language="C#" %>
<html>
   <script runat="server">
      void SubmitBtn_Click(Object sender, EventArgs e)
      {
         if (Name.Value == "UserID" && Password.Value == "GoldFish")
            Message.InnerHtml = "You are authenticated!";
         else
            Message.InnerHtml = "Login Failed!";
      }
   </script>
<body>
   <form method=post runat="server">
      <h3>Enter Name:
      <input id="Name" type=text size=40 runat="server">
      <h3>Enter Password:
      <input id="Password" type=password size=40 runat="server">
      <input type=submit value="Enter"
             OnServerClick="SubmitBtn_Click" runat="server">
      <h1>
         <span id="Message" runat="server"> </span>
      </h1>
   </form>
</body>
</html>


HtmlInputRadioButton 控件

创建一个服务器端控件,该控件映射到 <input type=radio> HTML 元素并允许您在 Web 页上创建单选按钮。

<input type=radio
       id="programmaticID"
       checked
       name="radiobuttongroup"   
       runat="server" >
备注
使用 HtmlInputRadioButton 控件对 HTML <input type=radio> 元素进行编程。通过将 Name 属性设置为组中所有 <input type=radio> 元素所共有的值,可以将多个 HtmlInputRadioButton 控件组成一组。同组中的单选按钮互相排斥;一次只能选择该组中的一个单选按钮。

【上篇】
【下篇】

抱歉!评论已关闭.