找到“禁用文本框”控件并保存其值
本文关键字:控件 保存 禁用文本框 文本 找到 | 更新日期: 2023-09-27 18:17:54
我想获得禁用文本框控件的值。
首先找到文本框
TextBox txt1 = (TextBox)(Page.FindControl("txt1"))
然后保存文本框的值
decimal val1 = Convert.ToDecimal(txt1.Text.Trim().ToString())
但是我没有得到任何值,因为它无法找到控件,因为我的文本框控件被禁用了。
Thanks in advance
TextBox可能嵌套在其他控件中。如果是,您希望递归地找到它。
例如
辅助方法public static Control FindControlRecursive(Control root, string id)
{
if (root.ID == id)
return root;
return root.Controls.Cast<Control>()
.Select(c => FindControlRecursive(c, id))
.FirstOrDefault(c => c != null);
}
使用var txt1 = (TextBox)FindControlRecursive(Page, "txt1");
更多的细节会有所帮助。它应该像这样简单:
string val1 = txt1.text;
你甚至不需要使用FindControl,除非有特殊的原因。
您确定您正在获取文本框在txt1
也 string val1 = Convert.ToDecimal(txt1.Text.Trim().ToString())
你的代码是错误的。如何将小数转换为字符串
我假设你的文本框中有一个数值,所以试着这样做:
decimal value = 0;
string money = String.Empty;
if(!string.IsNullOrEmpty(txtMoney.Text))
name = txtMoney.Text
value = Convert.ToDecimal(name);
将验证文本框以避免null,但也将其转换为十进制值。希望能有所帮助。
在赋值之前你不需要FindControl
,你应该能够在和中传递值,只要你的标记有runat="server"
。服务器端回发将提供对控件内部内容的访问。
经过测试,禁用的控件不会在回发期间推送该值。你真的应该用HiddenField
但是,<asp:HiddenField>
可能更适合您的需求。而不是一个禁用的文本框。就像这样:
string cash = String.Empty;
if(!string.IsNullOrEmpty(hfMoney.Value))
cash = hfMoney.Value;
隐藏字段将始终被隐藏,因此它始终是可访问的。