数据自增

实现input的自增:点击按钮input中的值自动增加,代码见备注。点击刷新就一直是值不变,只有点击提交才会变,分析原理。用开发人员工具篡改文本框的值自增就从新的值开始了。
 
 1 <%@ WebHandler Language="C#" Class="Handler3" %>
 2 
 3 using System;
 4 using System.Web;
 5 
 6 public class Handler3 : IHttpHandler {
 7     int a = 0;
 8     public void ProcessRequest (HttpContext context) {
 9 
10        if (!string.IsNullOrEmpty(context.Request.Form["IsPostBack"]))
11        {
12            string txtNum = context.Request.Form["txtNum"];
13             int.TryParse(txtNum,out a);
14        }
15        //string Num = context.Request.Form["txtNum"];
16        //int.TryParse(Num, out a);
17        a = a + 1;
18        context.Response.Write("<form action='' method='post' ><input type='text' name='txtNum'  value='"+a.ToString()+"' /><input type= 'hidden' name='IsPostBack' value='1' /><input type='submit' value='提交' /></form>");
19         
20     }
21  
22     public bool IsReusable {
23         get {
24             return false;
25         }
26     }
27 
28 }

 

 1 input自增
 2 <form action="Input自增.ashx">
 3 <input type="hidden" name="ispostback" value="true" />
 4 <input type="text" name="value" value="@value" /><input type="submit" value="增加" />
 5 </form>
 6 string ispostback = context.Request["ispostback"];
 7 string value = "1";
 8 if (ispostback == "true")
 9 {
10     value = context.Request["value"];
11     value = (Convert.ToInt32(value) + 1).ToString();
12 }
13 string filename = HttpContext.Current.Request.MapPath("/1/Input自增.htm");
14 string s = File.ReadAllText(filename);
15 s = s.Replace("@value", value);
16 context.Response.Write(s);
View Code


                                                                               •使用aspx重写input的自增。

•练习:加法计算器。常见错误:把htm设置成了起始页。type=submit才会自动提交表单,type=button不会自动提交。从ashx启动和从htm启动的区别
 
为什么单使用div在服务器取不出来值呢?因为不是服务器来读取客户的网页,而是浏览器收集客户在表单中输入的字段,然后形成请求参数发给服务器处理程序,由于没有把div当前的innerText发给服务器,所以服务器无法得知当前的值。也不要幻想有办法能将div的innerText提交给服务器,因为只有设定了name的input、textarea、select的value属性值才会被提交给服务器。
实现div内文本的自增。因为服务器不记得上次给浏览器的值是什么,而且不像input那样会将上次的值重新提交回来,因此浏览器需要用一个隐藏字段将上一次的值保存下来。
1 div自增
2 <form action="Div自增.ashx">
3 <input type="hidden" name="ispostback" value="true" />
4 <input type="hidden" name="value" value="@value" />
5 <div>@value</div><input type="submit" value="增加" />
6 </form>
7 服务端代码几乎和实现input的自增一样。
View Code


•http无状态,每次请求都是由一个新的DivAutoInc对象来处理请求。如果把value搞成static可以实现,但是两个用户访问的话就会串了。而用Input方式的话两个人各自点各自的,不会互相影响。

非表单元素无法将客户端的元素值传递给服务器端,即使是表单元素也只能传递value值,对于其他属性值比如背景颜色、大小等也是无法传递的,因此对于这些值都要存在隐藏字段中。这就是ASP.Net中ViewState的实现原理。
•其实div中的只是起到显示作用而已,使用IE的“开发人员工具”修改div的innerText,然后点击按钮发现值并没有按照我们修改以后的递增。而修改input版本的则有效果。
 
posted @ 2013-05-27 23:15  Big.Eagle  阅读(279)  评论(0编辑  收藏  举报