asp.net中viewState的应用

简介:
   

我们先看网上的一对问答     
private int x;
protected void Page_Load(object sender, EventArgs e)
{
     if (!IsPostBack)
     {
         x = 1;
     }
}

protected void Button1_Click(object sender, EventArgs e)
{
     x++;
     Response.Write(x.ToString());
}
      
这里每次调用都输出1,为什么不是递增?如果我想定义在当前页的变量如何定义。
     
这是因为x只是一个局部变量,在一次的网页请求,等到网页执行完毕的时候就会被回收,这时候x就已经不存在了,下次再访问的时候又会是一个新的x变量。

 

除了传统的Asp中的Session对象外,Asp.net提供了一个更好的ViewState对象。ViewState对象用来保存页面中的各种变量,甚至是对象。使用方法和HashTable类似,只要用变量名称做索引,如ViewState["Var"],就可以用存取变量Var的值,而不管Var是普通变量,还是对象,甚至是内存中的一张DataTable,太方便了。为什么可以用ViewState而不能用static变量哪?原因就是服务器端会为每个连接到该页面的用户分别建立一个ViewState,所以ViewState相当于页面级的Session。这下我们可以放心地使用ViewState来存取需要暂存的变量和对象了。

 

 

典型应用:查询以后绑定

 

 

 

aspx关键代码

         <tr>
            <td align="center" style="padding-bottom: 20px; font-weight: bold; padding-top: 20px">
                所在院系<asp:DropDownList ID="drpCollege" runat="server" Height="22px" Width="140px">
                </asp:DropDownList>
                &nbsp;&nbsp; 学生姓名<asp:TextBox ID="txtName" runat="server"></asp:TextBox>
                &nbsp;&nbsp;&nbsp;&nbsp;<asp:Button ID="btnQuery" runat="server" Text="查询"
                    onclick="btnQuery_Click" />
            </td>
        </tr>
        <tr>
            <td align="center" style="padding-bottom: 20px; padding-top: 20px">
                <br />
               
                <asp:GridView ID="GridView1" runat="server" DataKeyNames="Num" AllowSorting="true"
                    AutoGenerateColumns="false" CellPadding="5" GridLines="Both" BorderColor="Black"
                    Width="90%">

                </asp>

 

 

DAL关键代码:

        public IEnumerable<M_Student> ReadStuByCollegeAndName(String collnum, String name)
        {
            return from s in dc.M_Student
                   where
                       (!String.IsNullOrEmpty(collnum) ? s.CollegeNum.Equals(collnum) : true) &&
                       (!string.IsNullOrEmpty(name) ? s.Name.Contains(name) : true)
                   select s;
        } 

 

 

aspx.cs关键代码

 using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using OnlineTest.Datalinq;

namespace OnlineTest.Manager
{
    public partial class StudentInfoMaintain : BasePage
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                Bind();

                .......................................
             }
        }

        public void BindGridView(String cnum,String name)
        {
            IEnumerable<M_Student> models = BLL.M_StudentBLL.
ReadStuByCollegeAndName(cnum, name);
            if (null != models && 0 != models.Count())
            {
                // 起始条数
                int startRecord = AspNetPager1.PageSize * (AspNetPager1.CurrentPageIndex - 1);

                // 每页数目
                int maxRecords = AspNetPager1.PageSize;

                // 总数目
                this.AspNetPager1.RecordCount = models.Count();
                this.AspNetPager1.AlwaysShow = true;
                this.GridView1.DataSource = models.Skip(startRecord).Take(maxRecords);
                this.GridView1.DataBind();
            }
            else
            {
                this.GridView1.DataSource = null;
                this.GridView1.DataBind();
            }
        }

 

        public void Bind()
        {
            if (null == ViewState["num"])
            {
                ViewState["num"] = "";
            }

            if (null == ViewState["name"])
            {
                ViewState["name"] = "";
            }
            BindGridView(ViewState["num"].ToString(), ViewState["name"].ToString());
        }

 

        // 分页事件
        protected void AspNetPager1_PageChanging(object src, Wuqi.Webdiyer.PageChangingEventArgs e)
        {
            this.AspNetPager1.CurrentPageIndex = e.NewPageIndex;
           
Bind();
        }

 

        /// <summary>
        ///  查询
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void btnQuery_Click(object sender, EventArgs e)
        {
            if(!this.drpCollege.SelectedValue.Equals("0"))
            {
               
ViewState["num"] = this.drpCollege.SelectedValue;
            }
            if (!String.IsNullOrEmpty(this.txtName.Text))
            {
               
ViewState["name"] = this.txtName.Text;
            }
            Bind();
        }
    }
}

 

关于ViewState的原理和应用,请参看:http://blog.sina.com.cn/s/blog_67aaf4440100vq0x.html

 

 

 

目录
相关文章
|
1月前
|
算法 Java 调度
|
1月前
|
开发框架 缓存 前端开发
利用Visual Basic构建高效的ASP.NET Web应用
【4月更文挑战第27天】本文探讨使用Visual Basic与ASP.NET创建高效Web应用的策略,包括了解两者基础、项目规划、MVC架构、数据访问与缓存、代码优化、异步编程、安全性、测试及部署维护。通过这些步骤,开发者能构建出快速、可靠且安全的Web应用,适应不断进步的技术环境。
|
12天前
|
开发框架 前端开发 .NET
LIMS(实验室)信息管理系统源码、有哪些应用领域?采用C# ASP.NET dotnet 3.5 开发的一套实验室信息系统源码
集成于VS 2019,EXT.NET前端和ASP.NET后端,搭配MSSQL 2018数据库。系统覆盖样品管理、数据分析、报表和项目管理等实验室全流程。应用广泛,包括生产质检(如石化、制药)、环保监测、试验研究等领域。随着技术发展,现代LIMS还融合了临床、电子实验室笔记本和SaaS等功能,以满足复杂多样的实验室管理需求。
24 3
LIMS(实验室)信息管理系统源码、有哪些应用领域?采用C# ASP.NET dotnet 3.5 开发的一套实验室信息系统源码
|
4天前
|
网络协议 Java 程序员
TCP/IP协议栈是网络通信基础,Java的`java.net`包提供工具,使开发者能利用TCP/IP创建网络应用
【6月更文挑战第23天】 **TCP/IP协议栈是网络通信基础,它包含应用层(HTTP, FTP等)、传输层(TCP, UDP)、网络层(IP)、数据链路层(帧, MAC地址)和物理层(硬件信号)。Java的`java.net`包提供工具,使开发者能利用TCP/IP创建网络应用,如Socket和ServerSocket用于客户端和服务器通信。**
16 3
|
30天前
|
开发框架 .NET API
在Windows Server 2008 R2上运行.Net 8应用
在Windows Server 2008 R2上成功运行.Net 8程序,需安装三个补丁:Windows Server 2008 R2 SP1 (KB976932)是基础更新;VC_redist.x64提供MSVC库支持;KB3063858解决.NET运行时加载`kernel.dll`的路径问题。KB3063858可能需要KB2533623。详细信息和下载链接在文中给出。
|
1月前
|
C# Windows
一款.NET开源、简洁易用的Windows桌面小说阅读应用
一款.NET开源、简洁易用的Windows桌面小说阅读应用
|
1月前
|
开发框架 物联网 测试技术
【专栏】.NET 开发:打造领先应用的基石
【4月更文挑战第29天】本文探讨了.NET开发框架为何成为构建领先应用的首选。高性能与稳定性是.NET的核心优势,它采用先进的技术和优化策略,如.NET Core的轻量级设计和JIT/AOT编译模式。跨平台兼容性让开发者能用相同代码库在不同操作系统上构建应用。现代化的开发体验,如C#语言的创新特性和Visual Studio的强大工具,提升了开发者生产力。丰富的生态系统和广泛支持,包括庞大的开发者社区和微软的持续投入,为.NET提供了坚实后盾。
|
1月前
|
机器学习/深度学习 人工智能 Cloud Native
【专栏】洞察.NET 技术的前沿应用
【4月更文挑战第29天】本文探讨了.NET技术的前沿应用,包括.NET Core的跨平台崛起、云原生及AI/机器学习领域的整合。.NET Core支持多平台运行,开源社区的参与促进了其快速发展和性能优化。Xamarin与.NET MAUI助力跨平台移动应用和统一界面开发,而云原生应用借助.NET Core与Azure云服务得以轻松构建和部署。此外,ML.NET和TensorFlow.NET为.NET开发者提供了机器学习和深度学习工具,推动智能应用和边缘计算的创新。.NET技术正持续演进,引领软件开发新趋势。
|
1月前
|
人工智能 物联网 开发者
【专栏】探究.NET 技术的创新应用
【4月更文挑战第29天】本文探讨了.NET技术的最新进展和创新应用,包括.NET 5及后续版本的统一平台、性能提升、跨平台支持、云集成优化和开源社区的贡献。在创新应用场景中,重点介绍了微服务架构、物联网、AI、游戏开发和移动应用。未来,.NET将持续优化性能,深化云原生应用,集成新兴技术,扩大社区生态,并促进相关教育和培训。开发者应把握.NET技术的潜力,积极参与其发展,创造更多创新软件产品。
|
1月前
|
安全 Linux API
【专栏】.NET 开发:打造卓越应用的秘诀
【4月更文挑战第29天】本文介绍了.NET技术的起源、核心特性和应用场景,揭示了其打造卓越应用的秘诀。自2002年推出,.NET历经发展,现支持跨平台,包括.NET Core和.NET 5。其核心特性包括:跨平台兼容性、面向对象编程、内置安全性和高效性能。丰富的类库、强大的开发工具、简洁的语言语法以及活跃的社区支持,使.NET成为构建高效、安全应用的理想选择。随着技术进步,.NET将持续赋能开发者创造更多可能性。