作者:Wolfy
出处:http://www.cnblogs.com/wolf-sun/
引言
最近负责了一个公司的小项目,从前台到后代,都是自己搞的,为一个客户弄一个信息管理的小系统,虽然对界面什么的没要求,处于负责的态度,还是给他加了一下样式,当然,大部分样式还是从网上扒下来的。
密码框
情景是这样的,当你在用户列表中选择要编辑的记录时,需要在编辑页面将用户信息填在对应的框内,密码框的问题就来了。这里弄了一个简单页面进行测试,代码如下:
1 <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="Wolfy.TextBoxDemo.Default" %> 2 <!DOCTYPE html> 3 <html xmlns="http://www.w3.org/1999/xhtml"> 4 <head runat="server"> 5 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 6 <title></title> 7 </head> 8 <body> 9 <form id="form1" runat="server"> 10 <div> 11 密码框:<asp:TextBox runat="server" TextMode="Password" ID="txtPwd" /> 12 13 </div> 14 </form> 15 </body> 16 </html>
现在我们,在页面加载的时候,就给它设置个值,代码如下:
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Web; 5 using System.Web.UI; 6 using System.Web.UI.WebControls; 7 8 namespace Wolfy.TextBoxDemo 9 { 10 public partial class Default : System.Web.UI.Page 11 { 12 protected void Page_Load(object sender, EventArgs e) 13 { 14 if (!IsPostBack) 15 { 16 this.txtPwd.Text = "admin"; 17 } 18 } 19 } 20 }
一般情况下,都会习惯这样去写,浏览一下,被坑了。
竟然没有值,怎么给它赋值呢?
幸亏,还有一种方式,不然这密码框就废了,只能取,不能改变值,太无语了。
1 namespace Wolfy.TextBoxDemo 2 { 3 public partial class Default : System.Web.UI.Page 4 { 5 protected void Page_Load(object sender, EventArgs e) 6 { 7 if (!IsPostBack) 8 { 9 //this.txtPwd.Text = "admin"; 10 this.txtPwd.Attributes.Add("value","admin"); 11 } 12 } 13 } 14 }
浏览看看结果:
这.....
为什么非采用这方式,用Text属性多好!
只读框
情景是这样的,使用js或者jquery为只读框复制,在cs中再获取这个值,单击按钮,然后保存到数据库中。
js代码:
1 <script type="text/javascript"> 2 window.onload = function () { 3 document.getElementById("txtReadOnly").innerText="这是js动态赋值的"; 4 } 5 </script>
修改代码:
1 只读框:<asp:TextBox runat="server" ReadOnly="true" ID="txtReadOnly" /> 2 <asp:Button Text="按钮" ID="btn" OnClick="btn_Click" runat="server" />
效果
cs中的代码:
出于习惯性,想去文本框的值,一般都会采用上面的方式,可是....
1 protected void btn_Click(object sender, EventArgs e) 2 { 3 string strReadOnly = this.txtReadOnly.Text; 4 }
调试一下,看能不能获取到:
解决办法:
1 protected void btn_Click(object sender, EventArgs e) 2 { 3 string strReadOnly = Request.Form["txtReadOnly"]; 4 }
结果:
分析:
html源码:
修改只读框,给他一个默认值:
1 只读框:<asp:TextBox runat="server" ReadOnly="true" Text="这是默认值" ID="txtReadOnly" /> 2 <asp:Button Text="按钮" ID="btn" OnClick="btn_Click" runat="server" />
调试一下看看结果:
对应的html源码:
猜测:只读框通过Text属性,只能获取在客户端浏览器生成的html标签中有value属性的文本框的值。(比较拗口)
总结
之前开发都是负责某个模块,这第一次从登录到其他的业务处理,自己全权负责的,所以觉得很奇怪。今天群里面也有人问起了,就觉得有必要总结一下。对于只读框,如果本身就有值,那么可以通过Text属性获取到。如果是前台,动态设置的内容,就会获取不到。