C# ASP.NET控件ID特殊字符

C# ASP.NET控件ID特殊字符,c#,asp.net,C#,Asp.net,我有一个C#项目,动态创建了文本框,提交表单时,隐藏的代码需要检索文本框的值 文本框的id包含一个$美元符号,当检索值时,它会显示空 想知道$是否被视为ID的特殊字符,或者是否有办法处理此问题 //这是我的示例代码 //Create Form foreach (DataRow row in setOfColumns.Rows) { TextBox txtBox = new TextBox(); txtBox.ID = row["NameOfColumn"] + " textbox

我有一个C#项目,动态创建了
文本框
,提交表单时,隐藏的代码需要检索
文本框
的值

文本框的
id
包含一个
$
美元符号,当检索
值时,它会显示

想知道
$
是否被视为
ID
的特殊字符,或者是否有办法处理此问题

//这是我的示例代码

//Create Form
foreach (DataRow row in setOfColumns.Rows)
{
    TextBox txtBox = new TextBox();
    txtBox.ID = row["NameOfColumn"] + " textbox"; //Where row["NameOfColumn"] = "Money $"
}

//Display form on browser values
name="ctl00$ContentPlaceHolder1$ctl00$Money $"
id="ContentPlaceHolder1_ctl00_Money $"
value="$3,392"

//Submit Form
DataTable dt = new DataTable();
foreach (Control c in controls)
{
    if (c is TextBox)
    {
        DataRow dr = dt.NewRow();
        String txtValueCtrl = ((TextBox)c).Text.ToString(); //txtValueCtrl = "", it returns empty value for the textbox
        dr["Value"] = txtValueCtrl;

        dt.Rows.Add(dr);
    }
}

//Once I remove the '$' from the txtBox.ID it is able to retrieve the value from the textbox

如果您使用的是.NET 4.0或更高版本,则可以通过向“Static”添加属性“ClientIDMode”来防止此行为,因为该属性将不再导致以您所看到的方式修改客户端ID


关于您无法访问该值:您确定已为控件打开viewstate吗?

请显示一些代码,至少向我们提示您是如何执行此操作的。例如,它是ASP.NET文本框控件吗?提交表单时,表单数据中用作键的不是
id
属性,而是
name
属性。文本框的名称是什么?可能是重复的,您已经在id和名称上添加了空格。您可能错了。为什么要在Id和名称中添加空格$?我对控件Id的修改方式没有问题,因为我不是基于Id本身查找控件,代码会查看页面上的所有元素,并为值选择特定的元素。我尝试将控件的viewstate设置为true,但它仍然没有返回文本框的值。