【问题标题】:How to get value of dynamically created textbox web control in asp.net如何在 asp.net 中获取动态创建的文本框 Web 控件的值
【发布时间】:2019-08-30 17:48:45
【问题描述】:

我的 aspx 页面包含产品列表以及动态生成的文本框和每个产品的一个订单按钮。

文本框和按钮在运行时生成,其 id 为 txt110234,txt110235...等文本框,btn110234,btn110235...等按钮。

每次用户必须在文本框中输入数量并按下与任何产品关联的订单按钮才能下订单。

一切正常,但现在我想使用 ajax 来做,所以我需要获取用户在文本框中输入的值。我想做这样的事情-

   var quan = document.getElementById('<%= txt' + id + '.ClientID%>').value;

但它给了我以下错误。

编译器错误消息:CS1012:字符文字源错误中的字符过多:

如何获得文本框的值?任何建议将不胜感激..

【问题讨论】:

  • 发布的代码是 JavaScript,这就是它抱怨 (C#) 的原因。您必须使用 FindControl(id) 来获取控件的引用。
  • 你可能有你的javascript文字。可以直接放在页面上。
  • 但是我想用javascript来做。不可能吗?

标签: javascript c# asp.net


【解决方案1】:

您遇到的错误是因为您不能在“”块中涉及 javascript。这看起来也不可能,因为“”表达式是在页面呈现之前在服务器中评估的,但是您的“id”是客户端变量。

你可以像这样在服务器端设置脚本:

客户端代码:

function foo(ctlID)
{
   var quan = document.getElementById(ctlID).value;
}

服务器端代码:

TextBox txt = new TextBox();
txt.ID = "SomeID";
Form.Controls.Add(txt);
Button btn = new Button();
btn.ID = "someID";
btn.OnClientClick = "foo('" + txt.ClientID + "')";

【讨论】:

  • 谢谢..它真的是一个很好的解决方案..但我想要文本框客户端 ID,而它会返回按钮的客户端 ID
  • 是的,它给了我 id..但是当我在 javascript 代码中使用时,它给了我 null..
  • 抱歉,我忘记在客户端 ID 中添加 ''。现在修好了。
  • 我在 id.my 控件位于内容占位符内部之前添加了前缀“ctl00_ContentPlaceHolder1_”,因此它的 id 看起来像 //'ctl00_ContentPlaceHolder1_txt110234'。现在它正在工作。感谢您的建议。
  • 您不必手动执行此操作,而且不安全。如果您在所有控件都在其容器中之后设置OnClientClick 属性,那么您将获得正确的ID。此外,如果您可以确保不会为整个页面中的多个控件分配相同的 id,那么您可以使用静态 id,这意味着 ClientID 与 ID 完全相同。看这里:msdn.microsoft.com/en-us/library/…
【解决方案2】:

建议: 一种方法是使用 jQuery css 选择器。您可以为所有输入文本框分配一个特定的 cssclass,并通过 jQuery 选择器检索所有这些。

例如,在动态生成文本框时,您可以为它们分配 CssClass =".productQuantity"

然后使用 jQuery 选择器,例如 $('.productQuantity')

如果我想遍历多个元素,我个人更喜欢这种方法。这使我免于处理 ID 等。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-22
    • 2012-08-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多