(转)解决Asp.net中文本框控件(TextBox)readonly或disabled时内容无法POST到服

网页中有的时候想让用户无法在文本框控件(TextBox)里输入,常见的方法是把它的ReadOnly属性设为True,或者是将Enabled属性设为False。这两种方法的作用差不多。另外还可以用标签代替或者写脚本处理文本框获得焦点事件。后两者我们暂不讨论。

使用前两种方面会碰到一个问题,在客户端用脚本改变了文本框控件的内容,但是当网页提交时,修改后的内容不会被提交到服务器的,服务器上仍然使用前一次的内容。

为了解决问题,上google搜了一下,找到这样一篇文章,说的是二者之间的区别:
http://www.vikramlakhotia.com/ReadOnly_and_Enabled_property_of_TextBox_.aspx
但不幸的是,这里面的观点好像是错的,至少我根据他的说法做了一些试验,结果都不对。

一种已知的解决方案是,当网页提交的时候,用脚本把文本框的readOnly设置为false,disabled设置为false,提交完成后再改回来。当然,如果整个页面都被刷新掉了,那后面那个改回来的步骤就没必要了。

这种方案的局限性是,修改文本框属性这个动作必须在post动作之前。假设我们现在是想在按了一个按钮控件后,将文本框内的内容传到服务器,按钮有两个事件,一个是OnClientClick,一个是OnClick,前者在客户端执行,后者在服务器执行。经过试验,如果在OnClientClick里面修改文本框属性的话,这段脚本会执行,但是服务器拿到的还是原来的内容。这似乎意味着(但是如果在这段脚本写一个return false;OnClick事件就不会发生,这几个事件发生的顺序值得专门找个时间看一下)

后来看到了这篇文章:
http://www.velocityreviews.com/forums/t113398-server-side-controls-disabled-in-javascript.html
里面讨论的时候说,文本框控件本身有readonly和enabled属性,生成的html代码也有对应的readonly和disabled属性,如果我们修改的是后面那一套属性,那么就不会发生无法提交上去的问题。也就是说,我们可以在程序里面用类似于

  1. TextBox1.Attributes["readonly"] = "false";

这样的代码来设置,而不是直接设置TextBox的ReadOnly和Enabled属性

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值