js前台改变服务器控件的disable的属性,后台获取不到值

本文介绍了解决TextBox内容无法获取的问题,特别是在设置了ReadOnly属性的情况下。提供了几种方法让TextBox内容既不可编辑又能通过JS赋值,并确保服务器端能够正确读取。
 

1、在页面增加一个隐藏域;

2、在提交的时候先用js将服务器控件的值赋值给隐藏域。

3、后台获取隐藏域的值。

 

 

 

 

 

 

 

TextBox客户端JS赋值 后台获取

要求: 客户端不能输入,但可通过js赋值,并在服务器端获取到js赋的值

最近在用VS2005作项目,遇到一个这样的问题,textbox的内容总是无法获得,最后找来找去,原来是readonly搞的鬼

ReadOnly
获取或设置一个值,用于指示能否更改 TextBox 控件的内容。

重要事项:
发生回发时,TextBox 控件(其 ReadOnly 属性设置为 true)的 Text 值被发送到服务器,但是服务器不处理只读文本框。这样可以防止恶意用户更改只读的 Text 值。在回发之间,Text 属性的值保留在视图状态中,除非经过服务器端代码修改。

要想不让客户端更改,又想获得的话,可以用两种方法:
1、使用input的text控件代替;
2、不要直接使用属性设置readonly,而是通过在代码中用TextBox1.Attributes["readonly"] = "true"来设置。
3、TextBox1.Attributes["contentEditable"] = "false";
等效于ReadOnly="true"或直接从前台设置TextBox的属性contentEditable="false"

<think>我们正在解决如何设置MFC按钮控件Disable属性(即禁用按钮)。 根据之前的讨论和引用,我们可以通过以下方法实现: 1. 使用CWnd类的EnableWindow函数,该函数可以启用或禁用窗口(包括按钮控件)。 2. 如果按钮控件是通过资源编辑器创建的(即有一个资源ID),可以使用GetDlgItem获取该按钮的指针,然后调用EnableWindow(FALSE)来禁用。 具体步骤如下: 步骤1:获取按钮控件的指针 - 如果按钮控件是对话框的一个子控件,并且有资源ID(例如IDC_BUTTON1),则可以在对话框类中使用: CWnd *pButton = GetDlgItem(IDC_BUTTON1); pButton->EnableWindow(FALSE); // 禁用按钮 步骤2:直接在CButton对象上调用 - 如果按钮控件已经关联到一个CButton类型的成员变量(例如m_btn),则可以直接: m_btn.EnableWindow(FALSE); 引用[2]中提到了使用ShowWindow来显示或隐藏控件,同样EnableWindow是用来启用或禁用控件的。 引用[3]提到了禁用对话框中所有控件的方法,其中使用了一个回调函数DisableControl,在这个回调函数中调用了EnableWindow(FALSE)来禁用每个控件。不过,对于单个按钮,我们不需要这么复杂。 因此,针对单个按钮,我们可以简单地使用上述步骤1或步骤2。 注意:禁用后按钮将变为灰色,无法响应点击事件。 示例代码: 在对话框类(如CMyDialog)的成员函数中(例如OnInitDialog)禁用按钮: ```cpp BOOL CMyDialog::OnInitDialog() { CDialogEx::OnInitDialog(); // 方法1:通过资源ID获取按钮并禁用 GetDlgItem(IDC_BUTTON1)->EnableWindow(FALSE); // 方法2:如果已经将按钮控件关联到成员变量m_btnOK(通过DDX) // m_btnOK是CButton类型成员变量,通常在头文件中声明 // m_btnOK.EnableWindow(FALSE); return TRUE; } ``` 如果需要根据条件动态禁用或启用,可以在按钮点击事件或其他事件中调用EnableWindow。 例如,点击另一个按钮(比如IDC_BUTTON_ENABLE)来禁用IDC_BUTTON1: ```cpp void CMyDialog::OnBnClickedButtonEnable() { // 禁用IDC_BUTTON1 GetDlgItem(IDC_BUTTON1)->EnableWindow(FALSE); // 或者启用:EnableWindow(TRUE); } ``` 引用[4]中提到了一个自定义按钮的构造函数,但并没有直接提到禁用按钮。因此,我们主要参考引用[2]和[3]中关于控件状态设置的方法。 总结:设置按钮禁用属性,使用EnableWindow(FALSE)即可。 下面生成相关问题: </think>### MFC中设置Button控件Disable属性的方法 在MFC中设置Button控件的禁用状态可以通过以下两种主要方法实现: #### 方法1:使用`EnableWindow()`函数(推荐方式) ```cpp // 通过资源ID直接禁用按钮 GetDlgItem(IDC_BUTTON1)->EnableWindow(FALSE); // 通过成员变量禁用按钮(需预先绑定变量) m_btnOK.EnableWindow(FALSE); ``` **说明**: - `EnableWindow(FALSE)`设置禁用状态,按钮变为灰色不可操作 - `EnableWindow(TRUE)`恢复启用状态 - 适用于静态创建的按钮控件(通过资源编辑器添加)[^1][^2] #### 方法2:使用`ModifyStyle()`函数禁用按钮 ```cpp // 添加WS_DISABLED样式禁用按钮 GetDlgItem(IDC_BUTTON1)->ModifyStyle(0, WS_DISABLED); // 移除WS_DISABLED样式启用按钮 GetDlgItem(IDC_BUTTON1)->ModifyStyle(WS_DISABLED, 0); ``` **适用场景**: - 需要动态切换控件状态时 - 批量操作多个控件(结合循环结构)[^2][^3] #### 完整示例代码 ```cpp // 头文件声明 CButton m_btnTest; // 成员变量 // OnInitDialog初始化 BOOL CMyDialog::OnInitDialog() { CDialogEx::OnInitDialog(); // 绑定控件变量 m_btnTest.SubclassDlgItem(IDC_BUTTON_TEST, this); // 初始禁用状态 m_btnTest.EnableWindow(FALSE); return TRUE; } // 启用按钮的函数 void CMyDialog::EnableTestButton() { m_btnTest.EnableWindow(TRUE); } // 禁用按钮的函数 void CMyDialog::DisableTestButton() { GetDlgItem(IDC_BUTTON_TEST)->EnableWindow(FALSE); } ``` #### 禁用所有控件的扩展方法 如需禁用对话框中所有控件(包括按钮),可参考以下实现[^3]: ```cpp // 头文件声明 static BOOL CALLBACK DisableControl(HWND hwnd, LPARAM lParam); // 实现回调函数 BOOL CALLBACK CMyDialog::DisableControl(HWND hwnd, LPARAM) { ::EnableWindow(hwnd, FALSE); return TRUE; } // 禁用所有控件 void CMyDialog::DisableAllControls() { EnumChildWindows(m_hWnd, DisableControl, 0); } ``` ### 注意事项 1. **状态同步问题**:禁用按钮后,需确保相关操作不会被意外触发 2. **视觉反馈**:禁用按钮会自动变为灰色,无需额外设置样式 3. **动态创建按钮**:需保持按钮对象有效生命周期(推荐使用成员变量) 4. **启用顺序**:父窗口禁用时 (`EnableWindow(FALSE)`),所有子控件会被自动禁用 > 实际效果:禁用后按钮显示为灰色,不接受鼠标/键盘事件,但控件仍然可见(与`ShowWindow(SW_HIDE)`的隐藏效果不同)[^2]。
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值