• 第十节 12ViewState 简单


    <%@ Page Language="C#" AutoEventWireup="true" CodeFile="ViewState.aspx.cs" Inherits="ViewState" %>
    
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server">
        <title></title>
    </head>
    <body>
        <form id="form1" runat="server">
        <div>
        
            <asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>
            <asp:Button ID="Button1" runat="server" onclick="Button1_Click" Text="Button" />
        
        </div>
        </form>
    </body>
    </html>
    

      

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    /* ViewState初控(重点,常考)
     *  用asp.net重写div文本自增 (还要同时递增label的宽度,注意width的单位是Unit类型,不是简单的int)
     *  Lable.Text = (Convert.ToInt32(Label1.Text)+1).ToString();
     *  Lable.Width = new Unit(Label1.Width.Value + 10)
     *  
     * 查看生成的源代码,ASP.Net将所有隐藏内部统一放到一个名字为_VIEWSTATE的隐藏字段中,使用序列化算法将所有隐藏内容放到一个字符串中
     * 点周几次在使用ViewStateDecoder这个工查看ViewState内容,发现了确实半角这些改变的内容放到了ViewState中
     * 
     * 禁用ViewState的方法:enableviewstate=false; 禁用ViewState以后TextBox版本不受影响
     * DIV版本受影响应,因为input的value不依靠ViewStae
     */
    public partial class ViewState : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack) //这个是.net自带的 
            {
                Label1.Text = "0"; //页面直接进入的时候赋值0
            }
            /*else {
                string text = Label1.Text;
                int num = Convert.ToInt32(text) + 1;
                Label1.Text = num.ToString();
            }*/
        }
        protected void Button1_Click(object sender, EventArgs e)
        {
            string text = Label1.Text;
            int num = Convert.ToInt32(text) + 1;
            Label1.Text = num.ToString();
        }
    }
    

      

    <%@ Page Language="C#" AutoEventWireup="true" EnableViewState="false" CodeFile="ViewStateInput.aspx.cs" Inherits="ViewStateInput" %>
    
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server">
        <title></title>
    </head>
    <body>
        <form id="form1" runat="server">
        <div>
        
            <asp:Button ID="Button2" runat="server" style="margin-bottom: 1px" 
                Text="为Label添加100" onclick="Button2_Click" />
            <asp:Label ID="Label1" runat="server" Text="20"></asp:Label>
        <br /><br /><br /><br />
            <asp:TextBox ID="TextBox1" runat="server">0</asp:TextBox>
            <asp:Button ID="Button1" runat="server" EnableViewState="False" 
                onclick="Button1_Click" Text="Button" />
        
        </div>
        </form>
    </body>
    </html>
    

      

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    //回答ViewState原理的时候: 说input版本(TextBox)自增加和Div版本(Label)的不同
    //Label版本的值存到了ViewState中,TextBox版本的不用存,因为TextBox不是input,自已就会提交给服务器,不需要隐藏字段了
    
    //查看生成的源代码,asp.net将所有隐藏内容统一放到了名字为_VIEWSTATE的隐藏字段中,使用序列化算法将所有隐藏内容放到一个字符中中,
    //点周几次在使用ViewStateDecoder这个工具查看ViewState内容,发现了确实将这些改变的内容提要放到了
    //ViewState中,存储非表单域,非value值的容器
    
    
    //禁用ViewState的方法:enableviewstate=false
    //禁用ViewState以后TextBox版本不受影响,Div版本受影响,因为input的value不依靠ViewState
    
    
    
    /* 无状态Http
     * Http协议是无状态的,不会记得上次和网页"发生了什么",如果要知道上一次的状态,一个方法是在对浏览器响应结束之前将状态信息保存到而面表单中,下次而面再向服务器发出请求的时候带上这些状态信息
     * 这样服务器就能根据这些状态信息还原上次的状态了,类似于去看病的病历本
     * 
     * 状态信息保存在隐藏字段中的缺点: 加大网站的流量,降低访问速度,机密数据放在表单中会有数据欺骗等安全问题
     *
     */
    
    public partial class ViewStateInput : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
    
        }
        protected void Button1_Click(object sender, EventArgs e)
        {
            string i = TextBox1.Text;
            int num = Convert.ToInt32(i) + 1;
            TextBox1.Text = num.ToString();
    
            //修改TextBox1的宽度
            TextBox1.Width = new Unit(TextBox1.Width.Value + 10);
        }
        protected void Button2_Click(object sender, EventArgs e)
        {
            Response.Write("Label1的值是:"+Label1.Text+"<BR>");
            //禁用了ViewState就读不到上次给客户端的值,即使禁用了ViewState,写入到浏览器中的值也不会受影响
    
            Label1.Text = "100";
            //即使禁用ViewState在请求没有结束之前也能读出来设置的值
            Response.Write("Label1的值是1:" + Label1.Text + "<BR>");
        }
    }
    

      

  • 相关阅读:
    华为交换机配置和NTP服务器同步时间
    华为交换机常用查询命令
    Linux在线添加新磁盘
    华为交换机堆叠配置
    Linux-Centos安装nginx–解压版安装
    Linux修改为国内yum源
    pipenv的使用
    使用阿里云语音合成产品,从页面获取它的voice参数列表数据
    使用【Sonatype Nexus Repository Manager】搭建内部NPM源
    Vue3.0 项目中使用事件总线
  • 原文地址:https://www.cnblogs.com/xiangxiaodong/p/2405336.html
Copyright © 2020-2023  润新知