zoukankan      html  css  js  c++  java
  • .NET中TextBox控件设置ReadOnly=true后台取不到值三种解决方法

    当TextBox设置了ReadOnly=true后要是在前台为控件添加了值,后台是取不到的,值为空,多么郁闷的一个问题经过尝试,发现可以通过如下的方式解决这个问题.感兴趣的朋友可以了解下.

    当TextBox设置了ReadOnly="true" 后,要是在前台为控件添加了值,后台是取不到的,值为“空”
    原理没想通,说不清楚微软是出于什么考虑的,不过有时是要我们能通过前台脚本来填充值,并不希望用户修改其控件内容,这时就比较尴尬了。

    刚开始是换成Html 里的 <input type="text" readonly="readonly" > ,不过后来发现这个工作量是很大的, 所以网上搜了下,没找出TextBox ReadOnly="true" 页面填充值取不到的原因,不过问题还算解决了。
    正文:
      出于vs2005对页面代码的规范与安全,个人意见是使用第二种方法
      知道为什么TextBox设置了ReadOnly属性后,取不到值原理的,给下说明,谢谢啦!

    在.NET 2.0 下,当页面上的某个TextBox 设置了属性ReadOnly="True"时,通过客户端脚本给其赋值后,在后台代码中访问其Text属性却无法获得该值。经过尝试,发现可以通过如下的方式解决这个问题:

    方法一:不设置ReadOnly属性,通过onfocus=this.blur()来模拟,如下:
    复制代码 代码如下:
    <asp:TextBox ID="TextBox1" runat="server" onfocus=this.blur()></asp:TextBox>

    在此情况下,当文本框获得焦点时便立刻失去,所以也无法手动修改其内容,能够模拟ReadOnly,在后台代码中也能通过Text属性,正常获取通过脚本在客户端设置的值;

    方法二:设置了ReadOnly属性后,通过Request来取值,如下:
    前台代码:
    复制代码 代码如下:
    <asp:TextBox ID="TextBox1" runat="server" ReadOnly="True" ></asp:TextBox>

    后台代码:
    复制代码 代码如下:
    string Text = Request.Form["TextBox1"].Trim();

    方法三:在Page_Load()正设置文本框的只读属性,在前台不设置。就能正常读取,如下:
    复制代码 代码如下:
    protected void Page_Load(object sender, EventArgs e)
    {
    if (!Page.IsPostBack)
    {
    TextBox1.Attributes.Add("readonly","true");
    }
    }

    详细出处参考:http://www.jb51.net/article/34150.htm

  • 相关阅读:
    【数据结构】线性表&&顺序表详解和代码实例
    【智能算法】超详细的遗传算法(Genetic Algorithm)解析和TSP求解代码详解
    【智能算法】用模拟退火(SA, Simulated Annealing)算法解决旅行商问题 (TSP, Traveling Salesman Problem)
    【智能算法】迭代局部搜索(Iterated Local Search, ILS)详解
    10. js时间格式转换
    2. 解决svn working copy locked问题
    1. easyui tree 初始化的两种方式
    10. js截取最后一个斜杠后面的字符串
    2. apache整合tomcat部署集群
    1. apache如何启动
  • 原文地址:https://www.cnblogs.com/janneystory/p/3103220.html
Copyright © 2011-2022 走看看