科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道ASP.NET ViewState 初探

ASP.NET ViewState 初探

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

请看下面的示例:要在 Web 页上显示一个项目列表,而每个用户需要不同的列表排序。

作者:中国IT实验室 来源:中国IT实验室 2007年9月5日

关键字: ViewState ASP.NET

  • 评论
  • 分享微博
  • 分享邮件
  请看下面的示例:要在 Web 页上显示一个项目列表,而每个用户需要不同的列表排序。项目列表是静态的,因此可以将这些页面绑定到相同的缓存数据集,而排序顺序只是用户特定的 UI 状态的一小部分。ViewState 非常适合于存储这种类型的值。代码如下:
  
  [Visual Basic]
  <%@ Import Namespace="System.Data" %>
  <HTML>
  <HEAD>
  <title>用于页面 UI 状态值的 ViewState/title>
  </HEAD>
  <body>
  <form runat="server">
  <H3>
  在 ViewState 中存储非控件状态
  </H3>
  <P>
  此示例将一列静态数据的当前排序顺序存储在 ViewState 中。<br>
  单击列标题中的链接,可按该字段排序数据。<br>
  再次单击该链接,将按相反顺序排序。
  <br><br><br>
  <asp:datagrid id="DataGrid1" runat="server"
  OnSortCommand="SortGrid" BorderStyle="None" BorderWidth="1px"
  BorderColor="#CCCCCC" BackColor="White" CellPadding="5" AllowSorting="True">
  <HeaderStyle Font-Bold="True" ForeColor="White"
  BackColor="#006699">
  </HeaderStyle>
  </asp:datagrid>
  </P>
  </form>
  </body>
  </HTML>
  <script runat="server">
  
  ' 在 ViewState 中跟踪 SortField 属性
  Property SortField() As String
  
  Get
  Dim o As Object = ViewState("SortField")
  If o Is Nothing Then
  Return String.Empty
  End If
  Return CStr(o)
  End Get
  
  Set(Value As String)
  If Value = SortField Then
  ' 与当前排序文件相同,切换排序方向
  SortAscending = Not SortAscending
  End If
  ViewState("SortField") = Value
  End Set
  
  End Property
  
  ' 在 ViewState 中跟踪 SortAscending 属性
  Property SortAscending() As Boolean
  
  Get
  Dim o As Object = ViewState("SortAscending")
  If o Is Nothing Then
  Return True
  End If
  Return CBool(o)
  End Get
  
  Set(Value As Boolean)
  ViewState("SortAscending") = Value
  End Set
  
  End Property
  
  Private Sub Page_Load(sender As Object, e As EventArgs) Handles MyBase.Load
  
  If Not Page.IsPostBack Then
  BindGrid()
  End If
  
  End Sub
  
  Sub BindGrid()
  
  ' 获取数据
  Dim ds As New DataSet()
  ds.ReadXml(Server.MapPath("TestData.xml"))
  
  Dim dv As New DataView(ds.Tables(0))
  
  ' 应用排序过滤器和方向
  dv.Sort = SortField
  If Not SortAscending Then
  dv.Sort += " DESC"
  End If
  
  ' 绑定网格
  DataGrid1.DataSource = dv
  DataGrid1.DataBind()
  
  End Sub
  
  Private Sub SortGrid(sender As Object, e As DataGridSortCommandEventArgs)
  DataGrid1.CurrentPageIndex = 0
  SortField = e.SortExpression
  BindGrid()
  End Sub
  
  </script>
  
  [C#]
  <%@ Page Language="C#" %>
  <%@ Import Namespace="System.Data" %>
  <HTML>
  <HEAD>
  <title>用于页面 UI 状态值的 ViewState</title>
  </HEAD>
  <body>
  <form runat="server">
  <H3>
  在 ViewState 中存储非控件状态
  </H3>
  <P>
  此示例将一列静态数据的当前排序顺序存储在 ViewState 中。<br>
  单击列标题中的链接,可按该字段排序数据。<br>
  再次单击该链接,将按相反顺序排序。
  <br><br><br>
  <asp:datagrid id="DataGrid1" runat="server" OnSortCommand="SortGrid"
  BorderStyle="None" BorderWidth="1px" BorderColor="#CCCCCC"
  BackColor="White" CellPadding="5" AllowSorting="True">
  <HeaderStyle Font-Bold="True" ForeColor="White" BackColor="#006699">
  </HeaderStyle>
  </asp:datagrid>
  </P>
  </form>
  </body>
  </HTML>
  <script runat="server">
  
  // 在 ViewState 中跟踪 SortField 属性
  string SortField {
  
  get {
  object o = ViewState["SortField"];
  if (o == null) {
  return String.Empty;
  }
  return (string)o;
  }
  
  set {
  if (value == SortField) {
  // 与当前排序文件相同,切换排序方向
  SortAscending = !SortAscending;
  }
  ViewState["SortField"] = value;
  }
  }
  
  // 在 ViewState 中跟踪 SortAscending 属性
  bool SortAscending {
  
  get {
  object o = ViewState["SortAscending"];
  if (o == null) {
  return true;
  }
  return (bool)o;
  }
  
  set {
  ViewState["SortAscending"] = value;
  }
  }
  
  void Page_Load(object sender, EventArgs e) {
  
  if (!Page.IsPostBack) {
  BindGrid();
  }
  }
  
  void BindGrid() {
  
  // 获取数据
  DataSet ds = new DataSet();
  ds.ReadXml(Server.MapPath("TestData.xml"));
  
  DataView dv = new DataView(ds.Tables[0]);
  
  // 应用排序过滤器和方向
  dv.Sort = SortField;
  if (!SortAscending) {
  dv.Sort += " DESC";
  }
  
  // 绑定网格
  DataGrid1.DataSource = dv;
  DataGrid1.DataBind();
  }
  
  void SortGrid(object sender, DataGridSortCommandEventArgs e) {
  
  DataGrid1.CurrentPageIndex = 0;
  SortField = e.SortExpression;
  BindGrid();
  }
  
  </script>
  
  下面是上述两个代码段中引用的 testdata.xml 的代码:
  
  <?xml version="1.0" standalone="yes"?>
  <NewDataSet>
  <Table>
  <pub_id>0736</pub_id>
  <pub_name>New Moon Books</pub_name>
  <city>Boston</city>
  <state>MA</state>
  <country>USA</country>
  </Table>
  <Table>
  <pub_id>0877</pub_id>
  <pub_name>Binnet & Hardley</pub_name>
  <city>Washington</city>
  <state>DC</state>
  <country>USA</country>
  </Table>
  <Table>
  <pub_id>1389</pub_id>
  <pub_name>Algodata Infosystems</pub_name>
  <city>Berkeley</city>
  <state>CA</state>
  <country>USA</country>
  </Table>
  <Table>
  <pub_id>1622</pub_id>
  <pub_name>Five Lakes Publishing</pub_name>
  <city>Chicago</city>
  <state>IL</state>
  <country>USA</country>
  </Table>
  <Table>
  <pub_id>1756</pub_id>
  <pub_name>Ramona Publishers</pub_name>
  <city>Dallas</city>
  <state>TX</state>
  <country>USA</country>
  </Table>
  <Table>
  <pub_id>9901</pub_id>
  <pub_name>GGG&G</pub_name>
  <city>Muenchen</city>
  <country>Germany</country>
  </Table>
  <Table>
  <pub_id>9952</pub_id>
  <pub_name>Scootney Books</pub_name>
  <city>New York</city>
  <state>NY</state>
  <country>USA</country>
  </Table>
  <Table>
  <pub_id>9999</pub_id>
  <pub_name>Lucerne Publishing</pub_name>
  <city>Paris</city>
  <country>France</country>
  </Table>
  </NewDataSet>

查看本文来源

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章