首先要知道,只有设定了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); }