我在应用程序的配置页面上有几个列表,用户可以在这些列表中配置项目的顺序以及特定应用程序页面的选择。我使用在运行时添加的动态控件的ID将它们从A移动到B,但是由于我的JavaScript无法检索所选控件的ID,因此目前无法正常工作。
在深入挖掘并进一步检查之后,动态控件不会自动分配ID属性,而是将ID应用于控件的name属性,这就是JavaScript失败的原因。
我同时使用动态HtmlGenericControls和Textboxes。
检索ID的JavaScript,当我将this.id切换到this.name时,它可以正常工作。但是我需要使用ID属性。
elementRef.nativeElement
' ITEMID'是一个隐藏的输入字段。
我尝试过应用runat =" server",clientidmode =" static" /" autoID"但到目前为止没有运气。
为什么我的动态控件会将ID分配给name属性而不是ID属性?
我是否需要添加一些内容以使其应用于ID属性?
如果您需要更多信息,请在下方发表评论: - )
其他信息
网页正在使用母版页,因此控件会添加到内容占位符中。
我已尝试在javascript中设置ID,该ID正确地将ID添加到属性中,但在执行以下操作时,该项仍为null。
document.getElementById('itemID').value = this.id;
添加后的动态控制示例:
this.id = this.name;
TextBox selectedItem = (TextBox)exampleList.FindControl(itemID.Value);
如您所见,name属性包含ID。
答案 0 :(得分:0)
如果this.ID的值不是string
,而是类型为int
,double
等,那么您在尝试时会看到类似的问题分配给字符串值。您需要使用Convert.ToString(this.id)
或this.id.ToString()
。后者无法自行处理空值。
document.getElementById('itemID').value = Convert.ToString(this.id);
document.getElementById('itemID').value = this.id.ToString();
您现在看到的是默认方法,它打印控件Type
。如果你看到类似的类型,你可能会传入整个控件而不是它的值。这表明您需要检查文本值。
document.getElementById('itemID').value = this.id.Text;
答案 1 :(得分:0)
你试过了吗?
this.name.id
答案 2 :(得分:0)
创建动态控件并希望它们具有id
时,您需要在创建动态控件时指定它。
TextBox tb = new TextBox();
tb.ID = "TextBox1";
PlaceHolder1.Controls.Add(tb);
现在JavaScript可以通过ID找到它们,FindControl
也可以使用。 FindControl以递归方式工作,因此您首先需要在Master页面上找到ContentPlaceHolder
,然后在PlaceHolder
找到动态创建的TextBox。
ContentPlaceHolder contentPlaceHolder = Master.FindControl("ContentPlaceHolder1") as ContentPlaceHolder;
PlaceHolder placeHolder = contentPlaceHolder.FindControl("PlaceHolder1") as PlaceHolder;
TextBox textbox = placeHolder.FindControl("TextBox1") as TextBox;