当前位置: 首页 > 文章教程  > 计算机与互联网 > 网络编程

10.2新增的3个属性

8/31/2020 9:56:04 PM 人评论

10.2新增的3个属性

图片 1 知识点讲解:光盘:视频\PPT讲解(知识点)\第10章\新增的3个属性.mp4

在ASP..NET 4.5中,新增了3个控件属性。本节将详细讲解新增的这3个控件属性的基本知识,为读者学习后面的知识打下基础。

ViewStateMode属性用于指定是否为控件启用视图状态,此属性有如下3个可选值。

(1)Inherit:从父Control继承ViewStateMode的值。

(2)Enabled:启用此控件的视图状态,即使父控件已禁用了视图状态也是如此。

(3)Disabled:禁用此控件的视图状态,即使父控件已启用了视图状态也是如此。

实例048 演示ViewStateMode属性的用法

源码路径 光盘\daima\10\AspDotNet \  视频路径 光盘\视频\实例\第10章\048

首先编写实现文件ViewStateDemo.aspx,其主要代码如下。

<%@ Page Title="" Language="C#|" MasterPageFile="~/Site.Master" AutoEventWireup="true"
  CodeBehind="ViewStateDemo.aspx.cs" Inherits="AspDotNet.ViewStateDemo" %>
<asp:Content ID="Content1" ContentPlaceHolderID="head" runat="server">
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" runat="server">
  <asp:PlaceHolder ID="PlaceHolder1" 
runat="server" 
ViewStateMode="Disabled">
    <!--无 ViewState-->
    <asp:Label ID="Label1" 
runat="server" 
ViewStateMode="Disabled" />
    <br />
    <!--有 ViewState-->
    <asp:Label ID="Label2" runat="server" ViewStateMode="Enabled" />
    <br />
    <!--无 ViewState-->
    <asp:Label ID="Label3" runat="server" ViewStateMode="Inherit" />
  </asp:PlaceHolder>
  <br />
  <!—单击“回发”按钮后观察各个Label控件是否启用了 ViewState-->
  <asp:Button ID="Button1" runat="server" Text="回发" />
</asp:Content>
范例095:追加字符串
源码路径:光盘\演练范例\095视频路径:光盘\演练范例\095范例096:插入字符串
源码路径:光盘\演练范例\096视频路径:光盘\演练范例\096\

接下来编写处理文件ViewStateDemo.aspx.cs,其主要实现代码如下。

  public partial class ViewStateDemo : System.Web.UI.Page
  {
    protected void Page_Load(object sender, EventArgs e)
    {
      // 页面第一次加载时,分别给3个Label赋值,用于演示是否启用了 ViewState
      if (!Page.IsPostBack)
      {
        Label1.Text = "Label1";
        Label2.Text = "Label2";
        Label3.Text = "Label3";
      }
    }
  }

上述代码执行后将分别给3个Label赋值,用于演示是否启用了ViewState,如图10-1所示。

图片 228

图10-1 执行效果

ClientIDMode属性用于指定ASP.NET如何为客户端脚本中可以访问的控件生成ClientID。此属性有如下4个可选值。

(1)Inherit:控件继承其父控件的ClientIDMode设置。

(2)AutoID  ClientID:其值是通过串联每个父命名容器的Client ID值生成的,这些父命名容器都具有控件的ID值。在呈现控件的多个实例的数据绑定方案中,将在控件的ID值的前面插入递增的值。各部分之间以下划线字符( _ )分隔。此算法是ASP.NET 4以前的ASP.NET版本中唯一可以使用的算法。

(3)Predictable:对于数据绑定控件中的控件使用此算法。如果控件是生成多个行的数据绑定控件,则在末尾添加ClientIDRowSuffix属性中指定的数据字段的值。对于GridView控件,可以指定多个数据字段。如果ClientIDRowSuffix属性为空白,则在末尾添加顺序号,而非数据字段值。各部分之间以下划线字符( _ )分隔。

(4)Static ClientID:其值设置为ID属性的值。如果控件是命名容器,则该控件将用作其所包含的任何控件的命名容器的顶层。

图像说明文字

注意:在某控件层级中,如果没有设置ClientIDMode,则其默认值为AutoID。如果在控件层级中的父级控件设置了ClientIDMode,则其子控件的默认值为Inherit。

实例049 演示ClientIDMode属性的用法

源码路径 光盘\daima\10\AspDotNet \  视频路径 光盘\视频\实例\第10章\049

首先编写实现文件ClientID.aspx.aspx,其主要代码如下。

<%@ Page Title="ClientID" Language="C#|" MasterPageFile="~/Site.Master" AutoEventWireup="true"
  CodeBehind="ClientID.aspx.cs" Inherits="AspDotNet.ClientID" ClientIDMode="Static" %>
<asp:Content ID="Content1" 
ContentPlaceHolderID="head" 
runat="server"
>
</asp:Content>
<asp:Content ID="Content2" 
ContentPlaceHolderID="ContentPlaceHolder1"
runat="server">
  <!-- ClientIDMode.AutoID 的 Demo -->
  <fieldset>
    <legend>Legacy</legend>
    <asp:TextBox ID="txtLegacy" ClientIDMode="AutoID" runat="server" Text="ID: txtLegacy" />
  </fieldset>

  <!-- ClientIDMode.Static 的 Demo -->
  <fieldset>
    <legend>Static</legend>
    <asp:TextBox ID="txtStatic" ClientIDMode="Static" runat="server" Text="ID: txtStatic" />
  </fieldset>

  <!-- ClientIDMode.Inherit的Demo(注意:Page 上的ClientIDMode 的值为Static,所以此控件的客户端ID生成方式也是 Static)-->
  <fieldset>
    <legend>Inherit</legend>
    <asp:TextBox ID="txtInherit" ClientIDMode="Inherit" runat="server" Text="ID: txtInherit" />
  </fieldset>

  <!-- Predictable 模式中自动分配 Suffix 的方式 -->
  <fieldset>
    <legend>Predictable Repeater </legend>
    <div id="repeaterContainer">
      <asp:Repeater ID="repeater" runat="server" ClientIDMode="Static">
        <ItemTemplate>
          <div>
            <asp:Label ID="productPrice" ClientIDMode="Predictable" runat="server">
            <%#| string.Format(System.Globalization.CultureInfo.CurrentUICulture, "{0:c}", Eval("ProductPrice"))%>
            </asp:Label>
          </div>
        </ItemTemplate>
      </asp:Repeater>
    </div>
    <asp:TextBox ID="txtPredictableRepeater" runat="server" TextMode="MultiLine" Rows="10"
      ClientIDMode="Static" Style="width: 99%;" />
  </fieldset>

  <!-- Predictable 模式中分配指定 Suffix 的方式(ClientIDRowSuffix 指定 Suffix 的数据来源) -->
  <fieldset>
    <legend>Predictable ListView </legend>
    <asp:ListView ID="listView" runat="server" ClientIDMode="Static" ClientIDRowSuffix="ProductId">
      <ItemTemplate>
        <div>
          <asp:Label ID="productPrice" ClientIDMode="Predictable" runat="server">
            <%#| string.Format(System.Globalization.CultureInfo.CurrentUICulture, "{0:c}", Eval("ProductPrice"))%>
          </asp:Label>
        </div>
      </ItemTemplate>
      <LayoutTemplate>
        <div id="listViewContainer">
          <div id="itemPlaceholder" runat="server" />
        </div>
      </LayoutTemplate>
    </asp:ListView>
    <asp:TextBox ID="txtPredictableListView" runat="server" TextMode="MultiLine" Rows="10"
      ClientIDMode="Static" Style="width: 99%;" />
  </fieldset>

  <script type="text/javascript">

    window.onload = function () {
      document.getElementById('<%= txtLegacy.ClientID %>').value += " ClientID: " + '<%= txtLegacy.ClientID %>';

      document.getElementById('<%= txtStatic.ClientID %>').value += " ClientID: " + '<%= txtStatic.ClientID %>';

      document.getElementById('<%= txtInherit.ClientID %>').value +="ClientID: " + '<%= txtInherit.ClientID %>';

      document.getElementById('txtPredictableRepeater').value = document.getElementById ('repeaterContainer').innerHTML;

      document.getElementById('txtPredictableListView').value = document.getElementById('listViewContainer').innerHTML;
    }

  </script>
</asp:Content>
范例097:删除字符串
源码路径:光盘\演练范例\097视频路径:光盘\演练范例\097范例098:替换字符串
源码路径:光盘\演练范例\098视频路径:光盘\演练范例\098\

编写处理文件ClientID.aspx.cs,主要实现代码如下。

  public partial class ClientID : System.Web.UI.Page
  {
    protected void Page_Load(object sender, EventArgs e)
    {
      BindData();
    }
    // 绑定数据到 ListView
    private void BindData()
    {
      Random random = new Random();
      List<Product> products = new List<Product>();
      for (int i = 0; i < 5; i++)
      {
        products.Add(new Product { ProductId = i + 100, ProductName = "名称", ProductPrice = random.NextDouble() });
      }
      listView.DataSource = products;
      listView.DataBind();
      repeater.DataSource = products;
      repeater.DataBind();
    }
    class Product
    {
      public int ProductId { get; set; }
      public string ProductName { get; set; }
      public double ProductPrice { get; set; }
    }
  }

当在原始网页的第一页中选择如DataList或者GridView控件中的一行时,如果移动到另一个网页,在新的页上将选择同编号行,虽然我们只在第一页中选择了它。为了避免上述问题,ASP.NET 4.5为这些控件推出了EnablePersistedSelection属性。如果将该属性值设置为True,则在其他网页中将不能选择同一编号。例如,导航到原始网页,第一页中将显示选定的最初选定的行。此属性有如下3个可选值。

(1)EnablePersistedSelection:保存选中项的方式

(2)True:根据DataKeyNames指定的字段作为关键字保存选中项,分页操作不会改变选中项。

(3)False:根据行在当前页的表中的索引作为关键字保存选中项,分页后选中项会发生改变。例如,在第一页选中了第一行,那么分页到第二页时,选此页的第一行就会被当成选中项,也就是选中项发生了改变。

实例050 演示EnablePersistedSelection属性的用法

源码路径 光盘\daima\10\AspDotNet \  视频路径 光盘\视频\实例\第10章\050

首先编写实现文件EnablePersistedSelection.aspx,其主要代码如下。

<%@ Page Title="" Language="C#|" MasterPageFile="~/Site.Master" AutoEventWireup="true"
  CodeBehind="EnablePersistedSelection.aspx.cs" Inherits="AspDotNet.EnablePersistedSelection" %>
<asp:Content ID="Content1" ContentPlaceHolderID="head" runat="server">
</asp:Content>
<asp:Content ID="Content2" 
ContentPlaceHolderID="ContentPlaceHolder1" 
runat="server">
  <asp:GridView ID="gridView" 
runat="server" AllowPaging="True" 
DataSourceID="ObjectDataSource1"
    CellPadding="4" ForeColor="#|333333" 
GridLines="None" 
EnablePersistedSelection="true"
    DataKeyNames="productId">
    <AlternatingRowStyle BackColor="White" />
    <Columns>
      <asp:CommandField ShowSelectButton="True" />
      <asp:BoundField DataField="productId" HeaderText="productId" SortExpression="productId" />
      <asp:BoundField DataField="productName" HeaderText="productName" SortExpression="productName" />
      <asp:BoundField DataField="productPrice" HeaderText="productPrice" SortExpression="productPrice" />
    </Columns>
    <FooterStyle BackColor="#|990000" Font-Bold="True" ForeColor="White" />
    <HeaderStyle BackColor="#|990000" Font-Bold="True" ForeColor="White" />
    <PagerStyle BackColor="#|FFCC66" ForeColor="#|333333" HorizontalAlign="Center" />
    <RowStyle BackColor="#|FFFBD6" ForeColor="#|333333" />
    <SelectedRowStyle BackColor="#|FFCC66" Font-Bold="True" ForeColor="Navy" />
    <SortedAscendingCellStyle BackColor="#|FDF5AC" />
    <SortedAscendingHeaderStyle BackColor="#|4D0000" />
    <SortedDescendingCellStyle BackColor="#|FCF6C0" />
    <SortedDescendingHeaderStyle BackColor="#|820000" />
  </asp:GridView>
  <asp:ObjectDataSource ID="ObjectDataSource1" runat="server" SelectMethod="GetData"
    TypeName="AspDotNet.EnablePersistedSelection"></asp:ObjectDataSource>
</asp:Content>
范例099:URL编码
源码路径:光盘\演练范例\099视频路径:光盘\演练范例\099范例100:URL解码
源码路径:光盘\演练范例\100视频路径:光盘\演练范例\100\

编写处理文件EnablePersistedSelection.aspx.cs,其主要实现代码如下。

  public partial class EnablePersistedSelection : System.Web.UI.Page
  {
    protected void Page_Load(object sender, EventArgs e)
    {
          }
    // 为 GridView 提供数据
    public List<Product> GetData()
    {
      Random random = new Random();
      List<Product> products = new List<Product>();
      for (int i = 0; i < 100; i++)
      {
        products.Add(new Product { ProductId = i + 1, ProductName = "名称", ProductPrice = random.NextDouble() });
      }
      return products;
    }
  }
  // 为 GridView 提供数据的实体类
  public class Product
  {
    public int ProductId { get; set; }
    public string ProductName { get; set; }
    public double ProductPrice { get; set; }
  }

上述代码执行后的效果如图10-2所示,当换页之后不会选中以前选中的行。

图片 229

图10-2 执行效果

相关教程

共有条评论 网友评论

验证码: 看不清楚?