asp.net中添加了hidden类型的input回发后却没有值的深层原因及解决办法
在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):
Code
(这样做的理由很多,比如说用户录了一个姓名,在点击一个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):
浙公网安备 33010602011771号