前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >比较郁闷的textbox(asp.net 2.0)控件

比较郁闷的textbox(asp.net 2.0)控件

作者头像
Jianbo
发布2018-01-09 10:07:28
1.3K0
发布2018-01-09 10:07:28
举报
文章被收录于专栏:守望轩守望轩

今天转一个asp.net程序从vs2003到vs2005,老报错,postback后取不到textbox控件的改变的值,在vs2003下完全正常,在vs2005下就是不行,搞了一上午都不知为啥,于是上网查查,原来是textbox控件的readonly属性做的怪,真的郁闷.asp.net2.0 的这种改动让人无法理解。解决方法详见如下:

http://blog.joycode.com/saucer/archive/2006/05/11/75741.aspx

有时候,我们不希望用户直接编辑TextBox,而是希望通过客户端脚本的方式来设置内容,一般的做法是设置TextBox的属性ReadOnly为true。但在ASP.NET 2.0里有了变化,设置了ReadOnly为true的TextBox,在服务器端不能通过Text属性获取在客户端设置的新内容,在Reflector里比较一下LoadPostData的实现

.NET 1.1中,

代码语言:js
复制
bool IPostBackDataHandler.LoadPostData(string postDataKey, NameValueCollection postCollection)
 {
       string text1 = this.Text;
       string text2 = postCollection[postDataKey];
       if (!text1.Equals(text2))
       {
             this.Text = text2;
             return true;
       }
       return false;
 }

.NET 2.0中,

代码语言:js
复制
protected virtual bool LoadPostData(string postDataKey, NameValueCollection postCollection)
 {
       base.ValidateEvent(postDataKey);
       string text1 = this.Text;
       string text2 = postCollection[postDataKey];
       if (!this.ReadOnly && !text1.Equals(text2, StringComparison.Ordinal))
       {
             this.Text = text2;
             return true;
       }
       return false;
 }

就可以看出,如果设置了ReadOnly为true,从客户端传回的新的值是不被设置到Text属性的。

想要保持.NET 1.*中的行为,建议的做法是设置客户端属性ContentEditable=false,参考

SYSK 118: ReadOnly or ContentEditable? http://blogs.msdn.com/irenak/archive/2006/05/03/589085.aspx Consider this: you want a text box on a web page to be not editable by the user, but you want to be able to change the text box’s contents in client side script and see the updated text on the server. Did you know that if you set TextBox1.ReadOnly = true, the value set by the client side script will not be visible on the server? Try it for yourself… Here is the code:

代码语言:js
复制
 <form id=”form1″ runat=”server”>
     <div>
         <input id=”Button2″ type=”button”
 value=”Change Text via Client-Side Script” onclick=”ChangeText();” />
     </div>
     <asp:TextBox ID=”TextBox1″ runat=”server”>initial text</asp:TextBox>
     <asp:Button ID=”Button1″ runat=”server”
 OnClick=”Button1_Click” Text=”See Value on the Server-Side” />
 </form>
 
 <script language=”javascript” type=”text/javascript”>
 <!–
 function ChangeText()
 {    
     form1[“TextBox1”].setAttribute(“innerText”, “abc”);
 }    
 –>    
 </script>
 
 
 public partial class MyForm : System.Web.UI.Page
 {
     protected void Page_Load(object sender, EventArgs e)
     {            
         TextBox1.ReadOnly = true;
     }
     protected void Button1_Click(object sender, EventArgs e)
     {
         Response.Write(TextBox1.Text + “<br>”); 
     }
 } 

However, if instead of setting TextBox1.ReadOnly property

you set ContentEditable attribute to false, you’ll get the behavior you’re looking for:

TextBox1.Attributes[“contentEditable”] = “false”;

Special thanks to Vinay Kumar Baliyan who replied

with the information used in this post to Les Cardinal‘s question.

其实如果是设置客户端属性的话,设置客户端的readonly属性应该也是可以的:

TextBox1.Attributes[“readonly”] = “true”;

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2007-11-7,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档