【问题标题】:Dynamic control 'ID' automatically added to 'name' attribute, instead of ID attribute动态控件 'ID' 自动添加到 'name' 属性,而不是 ID 属性
【发布时间】:2017-02-02 14:40:53
【问题描述】:

我的应用程序的配置页面上有几个列表,用户可以在其中配置项目的顺序以及特定应用程序页面的选择。我正在使用运行时添加的动态控件的 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", clientidmode="static" / "autoID" 但到目前为止没有运气。

为什么我的动态控件获得分配给名称属性的 ID 而不是 ID 属性?

是否需要添加一些内容才能将其应用于 ID 属性?

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

附加信息

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

我尝试在将 ID 正确添加到属性的 javascript 中设置 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。

【问题讨论】:

    标签: javascript c# asp.net webforms


    【解决方案1】:

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

    TextBox tb = new TextBox();
    tb.ID = "TextBox1";
    PlaceHolder1.Controls.Add(tb);
    

    现在 JavaScript 可以通过 ID 定位它们,FindControl 也可以使用。 FindControl 以递归方式工作,因此您首先需要在母版页上找到ContentPlaceHolder,然后是PlaceHolder,然后是动态创建的TextBox。

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

    【讨论】:

    • 谢谢,我已经这样做了,并设法解决了这个问题,所以我会将此标记为答案。然而,这是我试图避免的,因为如果我不使用集合 ID,它会使一切变得更加简单。
    【解决方案2】:

    如果 this.ID 的值不是string,而是intdouble 等类型,则在尝试分配给字符串值时,您的代码会出现类似问题.您需要使用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;
    

    【讨论】:

    • 抱歉,目前这不会产生任何影响。这是因为 this.id 为 null,因为控件 ID 设置为 name 属性。我会添加额外的信息来向您展示问题。
    【解决方案3】:

    你试过了吗:

    this.name.id
    

    ?

    【讨论】:

    • 我刚试过这个,不,它不起作用:(。唯一的区别是 itemID.value 等于“undefined”而不是“”。
    猜你喜欢
    • 2010-11-08
    • 1970-01-01
    • 1970-01-01
    • 2017-08-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-12
    • 1970-01-01
    相关资源
    最近更新 更多