//注意,不是服务器读取网页,而是浏览器收集在表单中填写的字段,然后提交数据,
//给服务器来处理,由于没有把div当前的innertext发给服务器,所以服务器不能得知当前的值
//也不要幻想有办法能将div的innertext提交给服务器,因为只有设定了name的input,textarea
//select的value属性值才会被提交给服务器,只针对前面input,textarea,select这几个控件才能提交数据
---------------------------------------
上面意思是:的只有表单元素才能提交给后台,表单元素也只有value属性的值可以提交给服务器
比如表单的宽度:
---------------------------------------
下面做一个text框,实现,点击一下就把它的宽度+1
----------------------------------------------------
通过webform来实现:
在原来的项目:
/WebSiteTest
中添加:
宽度自增.aspx
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="宽度自增.aspx.cs" Inherits="宽度自增" %>

<!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>
    
    </div>
    <asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>
    <asp:Button ID="Button1" runat="server" οnclick="Button1_Click" Text="Button" />
    </form>
</body>
</html>
-------------------------------------
可以看到跑出来的html代码:
<!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><title>

</title></head>
<body>
    <form method="post" action="./宽度自增.aspx" id="form1">
     //<form method="post" action="./宽度自增.aspx" id="form1">
     //从这句看出来webform都是post方法提交数据,要想做成get是做不到的
     //但是做成post会有一个问题就是重复提交表单的时候,浏览器会有提示
     //效果很不好
<div class="aspNetHidden">
<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/wEPDwUKMTI2NTY4ODI3MQ9kFgICAw9kFgICAQ8PFgIeBFRleHQFATBkZGRIR372XDyVmQEoCsxYtJpuAGKXGmbc4njPiVM89RA1eA==" />
</div>
<div class="aspNetHidden">
<input type="hidden" name="__VIEWSTATEGENERATOR" id="__VIEWSTATEGENERATOR" value="E122DF2E" />
<input type="hidden" name="__EVENTVALIDATION" id="__EVENTVALIDATION" value="/wEdAAL7fTNzc+icJ05GwTvptJcwzfg78Z8BXhXifTCAVkevd7aVIvFI8otZQHyY11S+O9C5WITd4ECgLaZ2I1ZtOVYu" />
</div>
    <div>
    </div>
    <span id="Label1">0</span>//这里服务器控件<asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>被转换成了span控件
    <input type="submit" name="Button1" value="Button" id="Button1" />
    </form>
</body>
</html>
-----------------------------------------------------
在看看,aspx的cs文件:
宽度自增.aspx.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

public partial class 宽度自增 : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        if(!IsPostBack ){//直接进入的时候设置为0
            Label1.Text = "0";
            //IsPostBack这里的IsPostBack就是,以前讲的通过隐藏字段传递的
        }
    }
    protected void Button1_Click(object sender, EventArgs e)
    {//取到label的值,然后自增后赋值回去
        int i = Convert.ToInt32(Label1.Text);
            i++;
            Label1.Text = i.ToString();
    }
}
-----------------------------------------------------
//从上面的生成的html源码中可以看到:
<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/wEPDwUKMTI2NTY4ODI3MQ9kFgICAw9kFgICAQ8PFgIeBFRleHQFATBkZGRIR372XDyVmQEoCsxYtJpuAGKXGmbc4njPiVM89RA1eA==" />
这样的一个代码:
__VIEWSTATE
这个就是ViewState代码:
__VIEWSTATE就是存下次需要用到的代码,数据
什么是viewState: viewState其实就是用来存放[那些没有name 属性的表单] 数据的一个容器。
这里的/wEPDwUKMTI2NTY4ODI3MQ9kFgICAw9kFgICAQ8PFgIeBFRleHQFATBkZGRIR372XDyVmQEoCsxYtJpuAGKXGmbc4njPiVM89RA1eA==
是经过编码后的数据,可以用:ViewStateDecoder2这个工具来进行解析
---------------------------------------------------------------
可以看下解析结果:
<?xml version="1.0" encoding="utf-16"?>
<viewstate>
  <Pair>
    <Pair>
      <String>1265688271</String>
      <Pair>
        <ArrayList>
          <Int32>3</Int32>
          <Pair>
            <ArrayList>
              <Int32>1</Int32>
              <Pair>
                <Pair>
                  <ArrayList>
                    <IndexedString>Text</IndexedString>
                    <String>5</String>//这里就是需要提交给后台,被viewstate封装的值
                  </ArrayList>
                </Pair>
              </Pair>
            </ArrayList>
          </Pair>
        </ArrayList>
      </Pair>
    </Pair>
  </Pair>
</viewstate>
---------------------------------------------
关于另外两个字段的意思:
asp.net页面里__VIEWSTATEGENERATOR、__EVENTVALIDATION是做什么用的
服务器返送给浏览器的页面里,有这两个隐藏域,还有对应的数值。感觉,既然呈现给我们,似乎就有用,但不知道有什么用?
------解决思路----------------------
如果你学习 asp.net 控件开发技术,就会了解这个其实是核心技术。
asp.net 要给程序员提供一个类似 winform 的自动保持所有控件(包括内部子控件)
的成千上万状态的机制,不需要程序员自己来开发(例如自己再胡乱写什么隐藏域来保存
和提交)状态维系机制。当页面提交(回发)时,例如GridView上的所有数据行、每一行
内的所有自定义模板中的子控件等等,你会看到状态都自动重新填好了(哪怕你修改了
GridView中某一行的模板中的一个Label的ForeColor属性),这就是靠着网页的ViewState保
存着所有控件的状态值。而当用户在浏览器端点击一些操作,例如点击GridView中的“编辑”按
钮,页面并不仅仅触发这个Button_Click事件,还要触发Grid的一个Edit事件,等等这类事件,
也需要从客户端传给服务器端。
因此 PostData + Event 这两种机制和相关的数据,构成了 asp.net webform 的核心技术。
而传统的 web 服务器上有数百个网站,所以asp.net 设计者不用 web 服务器来保存这些数据,
而是在页面 html 文本中“夹带”这些信息,随着html的输出而输出,
随着 <form /> 的提交而带回,把浏览器端页面当作这些数据的一个存储载体
----------------------------------------------------------------
再看另一个例子:
这个例子,用一个text框来实现自增:
新建一个webform
/WebSiteTest
Input自增.aspx
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Input自增.aspx.cs" Inherits="Input自增" %>
<!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:TextBox ID="TextBox1" runat="server">0</asp:TextBox>
        <asp:Button ID="Button1" runat="server" οnclick="Button1_Click" Text="Button" />
    
    </div>
    </form>
</body>
</html>
--------------------------------------------------------------
Input自增.aspx.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

public partial class Input自增 : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {//直接进入的时候设置为0
            TextBox1.Text = "0";
            //IsPostBack这里的IsPostBack就是,以前讲的通过隐藏字段传递的
        }
    }
    protected void Button1_Click(object sender, EventArgs e)
    {
        //取到label的值,然后自增后赋值回去
        int i = Convert.ToInt32(TextBox1.Text);
        i++;
        TextBox1.Text = i.ToString();
    }
}
-------------------------------------------------------------
可以看到这个代码生成的html:
http://localhost:53627/WebSiteTest/Input%E8%87%AA%E5%A2%9E.aspx
<!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><title>
</title></head>
<body>
    <form method="post" action="./Input自增.aspx" id="form1">
<div class="aspNetHidden">
<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/wEPDwUKLTk3NjEyMzEzNGRk71NHMDbsieJOLOdeJmYLqrtiqKqPjnKQmqvtOr2bJJg=" />
</div>

<div class="aspNetHidden">

<input type="hidden" name="__VIEWSTATEGENERATOR" id="__VIEWSTATEGENERATOR" value="7E546094" />
<input type="hidden" name="__EVENTVALIDATION" id="__EVENTVALIDATION" value="/wEdAANZZumKrLz+OL/EwCGB3tXZESCFkFW/RuhzY1oLb/NUVM34O/GfAV4V4n0wgFZHr3eF8Ql+dUaHsiGgF7F383duzhWY03+dhzN926S9tRsTVg==" />
</div>
    <div>
    
        <input name="TextBox1" type="text" value="3" id="TextBox1" />
        <input type="submit" name="Button1" value="Button" id="Button1" />
    
    </div>
    </form>
</body>
</html>
--------------------------------------------------------
这个时候再去给这个:
__VIEWSTATE利用工具去解码:
可以看到:
/wEPDwUKLTk3NjEyMzEzNGRk71NHMDbsieJOLOdeJmYLqrtiqKqPjnKQmqvtOr2bJJg=
这个值,并没有被解码出,在inputbox中输入的值:
<?xml version="1.0" encoding="utf-16"?>
<viewstate>
  <Pair>
    <Pair>
      <String>-976123134</String>
    </Pair>
  </Pair>
</viewstate>
------------------------------------------
这是因为input本身就是一个表单控件,是不需要封装,就可以传值给服务器端的
-------------------------------------------------------------------------
下一个知识点:
宽度自增.aspx
中除了原来的label自增,再添加一个textbox
这次除了要实现textbox自增还要实现同时,自增textbox框的宽度:
----------------------
修改:宽度自增.aspx
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="宽度自增.aspx.cs" Inherits="宽度自增" %>

<!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>
    <style type="text/css">
        #form1
        {
            height: 70px;
        }
    </style>
</head>
<body>
    <form id="form1" runat="server">
    <asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>
    <asp:Button ID="Button1" runat="server" οnclick="Button1_Click" Text="Button" />
    <div>    <asp:TextBox ID="TextBox1" runat="server">0</asp:TextBox>
        <asp:Button ID="Button2" runat="server" οnclick="Button2_Click" Text="Button" />
    </div>

</form>
</body>
</html>
----------------------------------------------------------------
宽度自增.aspx.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

public partial class 宽度自增 : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        if(!IsPostBack ){//直接进入的时候设置为0
            Label1.Text = "0";
            //IsPostBack这里的IsPostBack就是,以前讲的通过隐藏字段传递的
        }
    }
    protected void Button1_Click(object sender, EventArgs e)
    {//取到label的值,然后自增后赋值回去
        int i = Convert.ToInt32(Label1.Text);
            i++;
            Label1.Text = i.ToString();
    }

protected void Button2_Click(object sender, EventArgs e)
    {
        //值自增
        int i = Convert.ToInt32(TextBox1.Text);
        i++;
        TextBox1.Text = i.ToString();
        //宽度自增
        //TextBox1 .Width.Type  = UnitType.Pixel;
        //通过上面这个代码可以看到:
        //这个宽度的单位是unit
        TextBox1.Width = new Unit(TextBox1 .Width .Value +10);
        //每次都增加十个像素
    }
}
--------------------------------------------------------------------
这个时候生成的html可以看下:
<!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><title>

</title>
    <style type="text/css">
        #form1
        {
            height: 70px;
        }
    </style>
</head>
<body>
    <form method="post" action="./宽度自增.aspx" id="form1">
<div class="aspNetHidden">
<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/wEPDwUKLTQ4ODQ4Nzc5OQ9kFgICAw9kFgQCAQ8PFgIeBFRleHQFATBkZAIFDw8WBB4FV2lkdGgbAAAAAAAAVEABAAAAHgRfIVNCAoACZGRkXGCqNajh4IuVyWymZyo4x40WfdVX5AkTrkfRIik/Rig=" />
</div>

<div class="aspNetHidden">

<input type="hidden" name="__VIEWSTATEGENERATOR" id="__VIEWSTATEGENERATOR" value="E122DF2E" />
<input type="hidden" name="__EVENTVALIDATION" id="__EVENTVALIDATION" value="/wEdAAQ2CRyaPRPldKknavZGjVRTzfg78Z8BXhXifTCAVkevdxEghZBVv0boc2NaC2/zVFQ/WMskeKo19Gyidl+m11dTbupdj64bs2PAn7f7VplzH8gtEYkEb8aSePQq3p1gkhE=" />
</div>
    <span id="Label1">0</span>
    <input type="submit" name="Button1" value="Button" id="Button1" />
    <div>    <input name="TextBox1" type="text" value="8" id="TextBox1" style="width:80px;" />
        <input type="submit" name="Button2" value="Button" id="Button2" />
    </div>

</form>
</body>
</html>

----------------------------------------------------------------
这时候用工具解码:
__VIEWSTATE
------------
/wEPDwUKLTQ4ODQ4Nzc5OQ9kFgICAw9kFgQCAQ8PFgIeBFRleHQFATBkZAIFDw8WBB4FV2lkdGgbAAAAAAAAVEABAAAAHgRfIVNCAoACZGRkXGCqNajh4IuVyWymZyo4x40WfdVX5AkTrkfRIik/Rig=
----------------------------------------------------------------------------------------------------------
可以看到:
<?xml version="1.0" encoding="utf-16"?>
<viewstate>
  <Pair>
    <Pair>
      <String>-488487799</String>
      <Pair>
        <ArrayList>
          <Int32>3</Int32>
          <Pair>
            <ArrayList>
              <Int32>1</Int32>
              <Pair>
                <Pair>
                  <ArrayList>
                    <IndexedString>Text</IndexedString>
                    <String>0</String>
                  </ArrayList>
                </Pair>
              </Pair>
              <Int32>5</Int32>//
              <Pair>
                <Pair>
                  <ArrayList>
                    <IndexedString>Width</IndexedString>
                    <Unit>80px</Unit>//这个地方存了文本框的宽度可以看到
                    <IndexedString>_!SB</IndexedString>
                    <Int32>256</Int32>
                  </ArrayList>
                </Pair>
              </Pair>
            </ArrayList>
          </Pair>
        </ArrayList>
      </Pair>
    </Pair>
  </Pair>
</viewstate>
可以看到textbox宽度被viewstate传到后台去了

ASP.Net学习笔记012--12ViewState初探相关推荐

  1. ASP.Net学习笔记014--ViewState初探3

    ASP.Net学习笔记014--ViewState初探3 为什么禁用了viewstate,还能修改label2的值 因为:viewstate只是记录label2的值,并不影响给label2进行设置 - ...

  2. ASP.Net学习笔记013--ViewState初探2

    ASP.Net学习笔记013--ViewState初探2 上课讲的viewstate,由于需要跟后台服务器进行传值,需要封装很多隐藏列,比如100条数据,就会有100个viewstate 如果用在一些 ...

  3. ASP.Net学习笔记015--ASP.Net中使用Cookie

    ASP.Net学习笔记015--ASP.Net中使用Cookie 表单数据欺骗: 原理跟收到欺骗短信一样,移动信号塔[基站],伪装的移动信号塔会屏蔽移动信号,并且 在信号范围内的手机会自动切换为接收伪 ...

  4. ASP.Net学习笔记008--ASP.Net揭秘之Input版自增补充说明

    以前写的课程都没有附上源码,很抱歉! ASP.Net学习笔记007ASP.Net Input版自增.zip http://credream.7958.com/down_20155694.html 1. ...

  5. ASP.Net学习笔记007--ASP.Net Input版自增

    2016/1/18 以前写的课程都没有附上源码,很抱歉! 课程中的源码可以加qq索要:1606841559 技术交流qq1群:251572072 技术交流qq2群:170933152 也可以自己下载: ...

  6. ASP.Net学习笔记006--Get和Post的区别

    以前写的课程都没有附上源码,很抱歉! 课程中的源码可以加qq索要:1606841559 技术交流qq1群:251572072 技术交流qq2群:170933152 也可以自己下载: ASP.Net学习 ...

  7. ASP.Net学习笔记005--ASP.Net的IsPostBack揭秘

    以前写的课程都没有附上源码,很抱歉! 课程中的源码可以加qq索要:1606841559 技术交流qq1群:251572072 技术交流qq2群:170933152 也可以自己下载: ASP.Net学习 ...

  8. ASP.Net学习笔记004--基于ashx方式的ASP.Net开发1

    以前写的课程都没有附上源码,很抱歉! 课程中的源码可以加qq索要:1606841559 技术交流qq1群:251572072 技术交流qq2群:170933152 也可以自己下载: ASP.Net学习 ...

  9. ASP.Net学习笔记003--网站和WebApplication的区别

    以前写的课程都没有附上源码,很抱歉! 课程中的源码可以加qq索要:1606841559 技术交流qq1群:251572072 技术交流qq2群:170933152 也可以自己下载: ASP.Net学习 ...

  10. ASP.Net学习笔记002--ASP.Net服务端控件做了什么2

    ASP.Net学习笔记002--ASP.Net服务端控件做了什么2 以前写的课程都没有附上源码,很抱歉! 课程中的源码可以加qq索要:1606841559 技术交流qq1群:251572072 技术交 ...

最新文章

  1. 深入理解:RabbitMQ的前世今生
  2. data类型的Url格式及Base64编码:把小数据直接嵌入到Url中
  3. 121 Best Time to Buy and Sell Stock
  4. leetcode520. py解字符串真是太残暴了
  5. HTTP_POST———使用mysql_udf与curl库完成http_post通信模块(mysql_udf,multi_curl,http,post)...
  6. NEO从源码分析看共识协议
  7. Android Fragment(二)
  8. macOS 使用手册
  9. P1855 榨取kkksc03
  10. leetcode695:DFS 岛屿最大面积(C语言)
  11. ubuntu 64 位 开发 android 需要安装的 32 位支持库
  12. VMwar配置静态ip
  13. Harmony OS — RoundProgressBar圆形进度条
  14. 笔记本电脑报价单_抚顺x射线扫描仪设备,x-ray设备厂家报价单-老友网
  15. java表格数据导出到Excel案例
  16. Android SDK是什么
  17. python猜数字游戏实例_Python文曲星猜数字游戏实例代码教程
  18. 测试手机软件打开速度的app,一加6千分之一秒 百款APP打开速度对比
  19. ASUS ROG Win10.21H1 x64专业工作站极速精简优化版
  20. 真空灾难:物理学最著名的未解难题之一

热门文章

  1. SecureCRT日志上添加时间戳
  2. 调用多个thrift接口ttypes冲突的问题
  3. (四)Paint函数实现QTableView中增加QCheckBox的方法
  4. Qt 字符串QString arg()用法总结
  5. 你可能需要为你的 APP 适配 iOS 11
  6. HDU 5228 ZCC loves straight flush( BestCoder Round #41)
  7. sC#进阶系列——WebApi 接口参数不再困惑:传参详解
  8. 【LetCode算法修炼】Two Sum
  9. DNS服务启动时卡在:Generating /etc/rndc.key:
  10. 一步一步使用Ext JS MVC与Asp.Net MVC 3开发简单的CMS后台管理系统之创建项目