JS赋值设置了readonly=true的TextBox时,后台取不到值的问题

本文详细介绍了在开发ASP.NET页面时遇到TextBox设置为ReadOnly后,通过JS赋值后后台无法获取值的问题,并提供了三个解决方案:不设置ReadOnly属性、通过Request来获取值、在Page_Load()方法中设置只读属性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

开发一个asp.net的页面遇到了TextBox设置了ReadOnly属性,在js中赋值后,后台代码取不到值的情况,经过在网上查找,找到了一下几个处理办法。

收藏起来。

1、不设置ReadOnly,设置onfocus=this.blur()
C#代码
<asp:TextBox ID="TextBox1" runat="server" onfocus=this.blur()></asp:TextBox>
<asp:TextBox ID="TextBox1" runat="server" onfocus=this.blur()></asp:TextBox>
文本框不变灰色,但也无法手动修改内容,可以在后台通过Text属性正常赋值取值

2、设置了ReadOnly属性后,通过Request来取值,如下:
前台代码:
<asp:TextBox ID="TextBox1" runat="server" ReadOnly="True" ></asp:TextBox>
<asp:TextBox ID="TextBox1" runat="server" ReadOnly="True" ></asp:TextBox>
后台代码:
string Text = Request.Form["TextBox1"].Trim();
string Text = Request.Form["TextBox1"].Trim();

3、在Page_Load()正设置文本框的只读属性,能正常读取,如下:
C#代码
protected void Page_Load(object sender, EventArgs e) 

    if (!Page.IsPostBack) 
    { 
        TextBox1.Attributes.Add("readonly","true"); 
    } 
}

 

转载于:https://www.cnblogs.com/qiaohd/archive/2012/03/23/2413660.html

<think>我们正在讨论ASP.NET控件的样式设置问题。用户询问如何正确设置TextBoxReadOnly和BackgroundColor属性。 根据ASP.NET的知识: 1. ReadOnly属性:设置true,文本框将变为只读,用户不能编辑其中的内容。但需要注意,在回发,只读文本框的不会包含在回发数据中,除非手动设置(例如在Page_Load中设置)。如果需要保留,可能需要特殊处理。 2. BackgroundColor:实际上,在ASP.NET中,设置背景颜色应该使用BackColor属性,而不是BackgroundColor。BackColor属性接受一个Color(可以是命名的颜色,也可以是十六进制或RGB)。 因此,正确的设置方式应该是: - 设置只读:ReadOnly="true" - 设置背景颜色:BackColor="颜色"(例如:BackColor="Red" 或 BackColor="#FF0000") 示例代码: ```aspnet <asp:TextBox ID="TextBox1" runat="server" ReadOnly="true" BackColor="#CCCCCC"></asp:TextBox> ``` 注意:如果同设置ReadOnly,并且希望背景色为灰色(表示只读),那么设置一个灰色背景是常见的做法。 另外,用户提供的引用中并没有直接相关的内容,但引用[1]中提到了一个自定义的AutoCompleteTextBox,引用[2]中是一个在GridView中显示序号的小技巧,与当前问题无关。 因此,我们直接回答用户的问题即可。 同,根据要求,生成相关问题。</think>### ASP.NET TextBox 控件样式设置指南 #### 1. **ReadOnly 属性设置** **正确用法**: ```aspnet <asp:TextBox ID="txtDemo" runat="server" ReadOnly="true"></asp:TextBox> ``` - ✅ **作用**:阻止用户编辑文本框内容 - ⚠️ **注意事项**: - 只读文本框的在回发**不会自动保存**,需在`Page_Load`中手动赋值: ```csharp protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { txtDemo.Text = "初始"; } } ``` - 与`Enabled="false"`的区别:后者会完全禁用控件(灰色显示),且不回传[^2] #### 2. **背景色设置** **正确用法**: ```aspnet <asp:TextBox ID="txtColor" runat="server" BackColor="#FFD700" <!-- 十六进制 --> BackColor="Gold"> <!-- 颜色名称 --> </asp:TextBox> ``` - ✅ **有效方式**: - `BackColor`属性(非`BackgroundColor`) - 支持格式:颜色名称(`Red`)、十六进制(`#FF0000`)、RGB(`rgb(255,0,0)`) - ⚠️ **常见错误**: ```aspnet <!-- 错误写法 --> <asp:TextBox BackgroundColor="Blue"...> <!-- 应使用 BackColor --> <asp:TextBox BackColor="rgb(0,0,255)"...> <!-- 需去掉引号内的rgb() --> ``` #### 3. **完整样式设置示例** ```aspnet <asp:TextBox ID="txtUser" runat="server" ReadOnly="true" BackColor="#F0F8FF" <!-- 浅蓝色 --> ForeColor="Navy" <!-- 文字颜色 --> BorderStyle="Dashed" <!-- 边框样式 --> Width="200px" Text="只读内容"> </asp:TextBox> ``` #### 4. **验证建议** 1. **客户端检查**: 在浏览器中右键 → 检查元素,确认渲染后的HTML包含`readonly="readonly"`和正确`style="background-color:..."` 2. **回发测试**: ```csharp protected void btnSubmit_Click(object sender, EventArgs e) { lblResult.Text = "提交: " + txtDemo.Text; // 验证只读框是否保留 } ``` ### 常见问题解决 | 问题现象 | 解决方法 | |---------|----------| | 只读文本框内容丢失 | 在`Page_Load`中重新绑定初始 | | 背景色不生效 | 检查是否与其他CSS冲突,添加`!important`:<br>`style="background-color: #FFD700 !important"` | | 移动端样式异常 | 添加响应式CSS:<br>`@media (max-width: 768px) { .textbox { width:100% } }` | > **最佳实践**:复杂样式建议使用CSS类 > ```aspnet > <asp:TextBox CssClass="readonly-field" ... /> > > /* CSS */ > .readonly-field { > background-color: #F5F5F5; > border: 1px solid #CCC; > padding: 5px; > } > ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值