精通
英语
和
开源
,
擅长
开发
与
培训
,
胸怀四海
第一信赖
Hidden 对象代表一个 HTML 表单中的某个隐藏输入域。这种类型的输入元素实际上是隐藏的。这个不可见的表单元素的 value 属性保存了一个要提交给 Web 服务器的任意字符串。如果想要提交并非用户直接输入的数据的话,就是用这种类型的元素。在 HTML 表单中 <input type="hidden"> 标签每出现一次,一个 Hidden 对象就会被创建。您可通过遍历表单的 elements[] 数组来访问某个隐藏输入域,或者通过使用document.getElementById()。
在asp.net中,我尝试象普通的html页面一样,添加了一个hidden类型的input,企图在回发后仍然存着用户之前录入的值。(这样做的理由很多,比如说用户录了一个姓名,在点击一个runat=server的提交按钮后,服务器判断该姓名已经存在,然后输出javascript.alert提示用户名称已经存在,请重新输入。这时候需要保存数据现场,也就是用户之前录入的姓名还得显示在文本框中。)结果我发现,回发后,再次从这个input中取值,却取不到值。
将这个hidden类型的input修改为runat=server。问题得到解决。
我之前一直是这样认为的(这个想法多多少少跟自己没有深入了解asp.net的机制有关):只要是hidden的input,在从服务器端返回到客户端后,呈现页面的时候,它的value就一定会有值。可是一旦仔细想就会觉得不对。凭什么hidden的input就一定会有值?今天写了个最基本的asp时代的简单页面,写到最后就发现自己一直以来的这个想法是错的。
其实就算是asp.net,原理和asp也是一样的,都是客户端发起请求,server端处理完后,返回。如果要文本框中保存着原有值,那就必须在服务器端取到后再赋回给客户端的文本框。可以肯定的是,asp.net中,每次提交的viewstate以hidden的input形式存在,目的只是以hidden的方式存值。在每次从服务器端返回后,文本框中的值肯定是从这个隐藏的input中分别取值出来重新赋上的。
附asp测试代码(你也可以直接将提交按钮的type设成submit):
<%
myvar=Request.Form("txt")
%>
<HTML>
<HEAD>
<TITLE> New Document </TITLE>
<META NAME="Generator" CONTENT="EditPlus">
<META NAME="Author" CONTENT="">
<META NAME="Keywords" CONTENT="">
<META NAME="Description" CONTENT="">
<script> function clickBt()
{
var inputTxt = document.getElementById("txt");
var inputHd = document.getElementById("hd");
inputHd.value = inputTxt.value;
form1.submit();
}window.onload=function() { document.getElementById("show").value = document.getElementById("hd").value; } </script>
</HEAD> <BODY> <form id="form1" method="post" action="test.asp"> it is a test: <input type="button" id="btn" value="提交" onclick="clickBt()"/> <input type="text" name="txt" value=""/> <input type="hidden" id="hd"/>
<br/>hd's value: <span id="show"></span>
<br/>response: <%Response.Write myvar %> </form> </BODY> </HTML>