Javascript 动态控制&x27;ID';自动添加到';名称';属性,而不是ID属性

Javascript 动态控制&x27;ID';自动添加到';名称';属性,而不是ID属性,javascript,c#,asp.net,webforms,Javascript,C#,Asp.net,Webforms,我在应用程序的配置页面上有几个列表,用户可以在其中配置项目的顺序以及特定应用程序页面的选择。我正在使用运行时添加的动态控件的ID将它们从A移动到B,但目前这不起作用,因为我的JavaScript无法检索所选控件的ID 在深入挖掘和进一步检查之后,动态控件不会自动分配ID属性,而是将ID应用于控件的name属性,这就是JavaScript失败的原因 我同时使用动态HtmlGenericControls和文本框 检索ID的JavaScript,当我将this.ID切换到this.name时,它会工作

我在应用程序的配置页面上有几个列表,用户可以在其中配置项目的顺序以及特定应用程序页面的选择。我正在使用运行时添加的动态控件的ID将它们从A移动到B,但目前这不起作用,因为我的JavaScript无法检索所选控件的ID

在深入挖掘和进一步检查之后,动态控件不会自动分配ID属性,而是将ID应用于控件的name属性,这就是JavaScript失败的原因

我同时使用动态HtmlGenericControls和文本框

检索ID的JavaScript,当我将this.ID切换到this.name时,它会工作。但是,我需要使用ID属性

document.getElementById('itemID').value = this.id;
“itemID”是一个隐藏的输入字段

我尝试过应用runat=“server”、clientmode=“static”/“autoID”,但到目前为止没有成功

为什么我的动态控件将ID分配给name属性而不是ID属性

是否缺少一些我需要添加的内容,以便将其应用于ID属性

如果您需要更多信息,请在下面发表评论:-)

补充资料

该网页使用母版页,因此控件添加到内容占位符中

我已经尝试在javascript中设置ID,将ID正确添加到属性中,但在执行以下操作时,该项仍然为空

this.id = this.name;

TextBox selectedItem = (TextBox)exampleList.FindControl(itemID.Value);
添加后的动态控件示例:

<input name="ctl00$uniqueBody$ctl86" type="text" value="EXAMPLE" runat="server">


正如您所看到的,name属性保存ID。

如果this.ID的值不是
字符串,而是类型
int
double
,等等,那么在尝试分配字符串值时,您的代码会遇到类似的问题。您需要使用
Convert.ToString(this.id)
this.id.ToString()
。后者不能单独处理空值

document.getElementById('itemID').value = Convert.ToString(this.id);

document.getElementById('itemID').value = this.id.ToString();
您现在看到的是默认方法,它打印控件
类型
。如果您看到这样的类型,则很可能传入了整个控件,而不是它的值。这表明您需要检查文本值

document.getElementById('itemID').value = this.id.Text;
您是否尝试过:

this.name.id

当您创建动态控件并希望它们具有
id
时,您需要在创建它们时指定该id

TextBox tb = new TextBox();
tb.ID = "TextBox1";
PlaceHolder1.Controls.Add(tb);
现在JavaScript可以通过它们的ID来定位它们,
FindControl
也可以工作。FindControl以递归方式工作,因此首先需要在母版页上找到
ContentPlaceHolder
,然后是
占位符
,然后是动态创建的文本框

ContentPlaceHolder contentPlaceHolder = Master.FindControl("ContentPlaceHolder1") as ContentPlaceHolder;
PlaceHolder placeHolder = contentPlaceHolder.FindControl("PlaceHolder1") as PlaceHolder;
TextBox textbox = placeHolder.FindControl("TextBox1") as TextBox;

对不起,在这一点上没有什么区别。这是因为This.id为null,因为控件id设置为name属性。我将添加额外的信息来向您说明问题。我刚刚尝试了此方法,但没有成功:(.唯一的区别是itemID.value等于“undefined”,而不是“”。谢谢,我已经这样做了,并且设法解决了这个问题,所以我将把这个标记为答案。但是,这是我试图避免的,因为如果我不使用set ID,这会使一切变得更简单。