博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
浅谈ViewState原理
阅读量:5873 次
发布时间:2019-06-19

本文共 1377 字,大约阅读时间需要 4 分钟。

  首先要知道,只有设定了name的input,textarea,select,它们的value属性才会被提交给服务器,而即使是设定了name 的表单元素,它能提交给服务器的也只能是value属性,其他的比如大小,背景色等也是无法提交给服务器的,所以要将这些值存在一个隐藏的字段中。

举两个例子来解释一下:
1. input(textbox)版本的自增,由于textbox本身就是input表单元素,所以它本身的value值会提交给服务器,当点击按钮,触发自增事件,value值发生改变,相应的textbox中的值也会发生改变。

2.div版的自增,由于div本身没有name,所以无法将div中的innertext值提交给服务器,所以要想实现自增效果,必须要设置一个input的隐藏(hidden)字段,并且将它的value属性设为与div中的innertext相同的值,这样当点击按钮,触发某个事件的时候,input隐藏字段将value值提交给服务器,当value值发送改变时,input隐藏字段中的value值也发生了变化,而由于div中的innertext值与value值相同,所以显示的是div中的值发生了变化,从而达到了div的自增,而实际上div只不过是达到了显示input中隐藏字段的value值。

也就是说,在div版本自增中添加 的<input type="hidden" name="num" value="@value">这条语句,实现的效果就是ViewState。

<form action="自增.ashx">

    <input type="hidden" name="ispostback" value="true" />
    <input type="hidden" name="num" value="@value" />
    <div>@value</div>
    <input type="submit" value="自增" />
</form>

ashx代码:
public void ProcessRequest (HttpContext context) {
        context.Response.ContentType = "text/html";
        string ispostback=context.Request["ispostback"];
        string value = "0";
        if(ispostback=="true")
        {
            value=context.Request["num"];
            int i = Convert.ToInt32(value);
            i++;
            value = i.ToString();
        }
       
        string fullpath = context.Server.MapPath("自增.htm");
        string webhtml = System.IO.File.ReadAllText(fullpath);
        webhtml = webhtml.Replace("@value",value);
        context.Response.Write(webhtml);
    }

转载于:https://www.cnblogs.com/Jove-wei/archive/2011/11/30/2269684.html

你可能感兴趣的文章
网线(水晶头)制作流程 请附件下载
查看>>
基于APPIUM的移动自动化测试
查看>>
使用PowerShel导入和导出Hyper-v虚拟机
查看>>
NodeJs+Qunit的使用方式
查看>>
求两个数的最大公约数
查看>>
for循环语句的用法
查看>>
ERROR 1820 (HY000): You must reset your password
查看>>
解决QT5 VS2010调试时不能显示字符串的内容
查看>>
快速构建Windows 8风格应用34-构建Toast通知
查看>>
Ubuntu下部署zabbix 开源监控系统
查看>>
M283-bsp包问题
查看>>
Android的手机震动
查看>>
mysql 数据库的维护,优化
查看>>
pssh安装使用
查看>>
Erlang资料
查看>>
Linux查询命令man手册各章节解释
查看>>
linux下面实现执行rm命令,显示do not use rm command
查看>>
[李景山php]每天TP5-20170125|thinkphp5-Process.php-7
查看>>
书上的一个关于LINQ的例子
查看>>
nginx+kibana代理以及简单认证
查看>>