查找已禁用的文本框控件并保存其值

时间:2014-08-13 14:19:21

标签: c# asp.net

我想获取已禁用文本框控件的值。

首先,我找到了文本框

TextBox txt1 = (TextBox)(Page.FindControl("txt1"))

然后保存文本框的值

decimal val1 = Convert.ToDecimal(txt1.Text.Trim().ToString())

但我没有得到任何价值,因为它无法找到控件,因为我的文本框控件已被禁用。

提前致谢

4 个答案:

答案 0 :(得分:0)

更多细节会有所帮助。它应该简单:

string val1 = txt1.text;

除非有特殊原因,否则您甚至不需要使用FindControl。

答案 1 :(得分:0)

您确定要获取txt1中的文本框

  string val1 = Convert.ToDecimal(txt1.Text.Trim().ToString())

您的代码错误..如何将小数转换为字符串

答案 2 :(得分:0)

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"); 

答案 3 :(得分:0)

我假设你的文本框中有一个数值,所以试试这样做:

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;

隐藏字段将始终隐藏,因此始终可以访问。