找到“禁用文本框”控件并保存其值

本文关键字:控件 保存 禁用文本框 文本 找到 | 更新日期: 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;

隐藏字段将始终被隐藏,因此它始终是可访问的。