【问题标题】:Add new ASP.NEt server controls with jQuery?用 jQuery 添加新的 ASP.NET 服务器控件?
【发布时间】:2013-06-29 07:41:01
【问题描述】:

我有一组在表单上重复的字段。它们只是 3 个输入框。我在集合底部有一个链接,上面写着“添加更多”。单击时,我在 jQuery 中使用 .append() 来写出新的输入字段行(并将它们命名为独特的名称)。问题是我添加的是 HTML 字段,而不是 ASP.NET 服务器控件。

我如何在我的代码中访问它们,因为它们直到运行时(即浏览器中的运行时)才会在表单上看到?

-克里斯

【问题讨论】:

  • 嗨,克里斯,我这里也有类似的情况,你提到你通过使用 ListView 模板列解决了这个问题。但是您如何从这些动态生成的文本框中检索用户输入值。谢谢和问候,

标签: jquery asp.net


【解决方案1】:

这基本上是不可能的。

jQuery 纯粹在客户端运行,而 ASP.Net 服务器端控件主要存在于服务器上。

相反,您可以通过将信息放入隐藏字段中来使用 jQuery 与服务器端代码进行通信。

考虑切换到 ASP.Net MVC,这在这类事情上要好得多。

【讨论】:

  • 我没有能力切换到 MVC...不是我的项目,不是我的决定。通过使用 ListView 模板列,我能够完成我想要的。
  • @ee99ee:你有一个例子说明你是怎么做到的吗?我很想看看。
  • 为什么不使用jQuery .get 函数在html iframe 中显示asp.net 控件的内容?
  • @MichaelDark:这不适用于 ASP.Net 服务器控件和 ViewState。还有,<iframe>s 和 AJAX 基本上是对立的。
【解决方案2】:

是的,你可以的!

好吧,你不能真正添加​​“服务器控件”,但你当然可以在客户端添加输入框,发布它并在服务器端读取它们的值。

假设您添加以下输入客户端:

<input type="text" id="textbox_id" name="textbox_name" />

输入及其值将在请求中发送到服务器,因此访问它的服务器端代码是:

string value = Request.Form["textbox_name"];

【讨论】:

    【解决方案3】:

    正如 SLaks 所说,这基本上是不可能的。但是,一种解决方法是将所有动态字段“压缩”到一个隐藏字段中,该隐藏字段本身就是一个 ASP.NET 控件。例如,您可以在 jQuery 中设置一个表单提交处理程序,它将您的动态表单字段序列化为 JSON 字符串,并将您的 ASP.NET 隐藏字段设置为该值。显然,您的后端必须对其进行反序列化并相应地对其进行处理,就像您在加载页面时的前端一样。

    【讨论】:

      【解决方案4】:

      有几种方法可以做到这一点。我假设“3 个输入框”,您的意思是 3 个TextBox 控件:

      1. 在标记中添加更多TextBox 控件,并隐藏额外的控件,直到用户单击“添加更多”。如果您希望允许用户添加的控件数量有一个合理的上限,这将是合适的。

      2. 在回发之前,获取新添加控件的值,并将它们放在隐藏字段中。服务器将能够从那里读取值。

      3. 通过 AJAX 将控件的值传递给服务器。

      我确信还有其他方法可以实现这一点,但我认为这三种方法中的一种对你有用。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-06-03
        • 2011-02-08
        • 2012-07-12
        • 1970-01-01
        • 2011-03-24
        • 2011-03-02
        • 1970-01-01
        • 2018-07-24
        相关资源
        最近更新 更多