使用javascript添加asp.net控件

时间:2009-12-07 22:03:03

标签: .net asp.net

我想通过Javascript向页面添加ASP:labelASP:textbox控件。

<asp:Label ID="lblone" runat="server"></asp:Label>

如果我想写这个语法或者想要使用innerHTML在页面上添加这个标签,那么希望可以成为......

我想在按钮点击事件中添加它...并且ID应该附加1并且下一次添加1 + 1

6 个答案:

答案 0 :(得分:3)

您无法通过客户端javascript添加服务器控件。服务器控件在服务器端呈现并发送到客户端。根据您的尝试,您可能希望使用ViewState保持状态。

答案 1 :(得分:2)

它是否需要是ASP .NET控件,还是仅仅是普通的HTML?

如果你想要一个ASP .NET控件,那么按照设计,它们会在服务器上呈现,因此需要使用以下方法之一添加控件:

1)同步回发(正常回发) 2)Async PostBack(javascript postback,它不会直观地刷新页面,但仍会进行回发) 3)传统的AJAX

您可能已经尝试过Sync PostBack,因为您提到要在Javascript中执行此操作。这就是Async PostBack或传统的AJAX。

Async PostBack是最简单的,因为您只需将所有内容都包装在UpdatePanel

<asp:UpdatePanel id="Updater" runat="server">
    <asp:PlaceHolder id="AddControlsToThis" runat="server" />
    <asp:Button id="Submit" runat="server" />
</asp:UpdatePanel>

将此视为正常的回发,在代码隐藏中,在按钮点击时将占位符添加到控件中。

第三种方法(通过AJAX添加)在这里描述的有点太多,但基本上你会使用AJAX向你在服务器上设置的Web服务发出请求,然后你需要“渲染”服务器上的控件(每个控件都有一个RenderControl函数......您需要使用它来获取生成的HTML)并使用生成的HTML作为Web服务器的响应发回...对不起,如果这是一点点模糊。就像我说的那样,传统的AJAX方法需要更多的描述,而不是我可以进入这里。

祝你好运。

答案 2 :(得分:1)

您无法使用JavaScript添加服务器控件,因为服务器控件已在服务器上创建。 :)但您可以使用它添加一个可以访问服务器端的<input />元素:

var nextID = 0;
function addTextInput(container) {
  var txtInput = document.createElement('input');
  txtInput.type = 'text';
  txtInput.id = 'txtInput' + (nextID++);
  txtInput.name = txtInput.id;
  container.appendChild(txtInput);
}

此功能将创建一个新文本框并将其添加到container。动态创建的框将命名为 txtInput0 txtInput1 ,..., txtInputN

在您的aspx页面的代码隐藏中,您可以使用以下代码来读取值:

foreach (string key in this.Request.Form.Keys)
{
  if (key.StartsWith("txtInput"))
  {
    // Do something with the dynamic values...
  }
}

答案 3 :(得分:0)

您可以通过jQuery轻松地通过javascript动态地将html控件添加到页面中。这将允许您在不与服务器通信的情况下执行此操作,如果您希望使用.attr('id','NEWIDVALUE'),您也可以设置ID;关于元素。

答案 4 :(得分:0)

如果您要动态添加到页面的标签/文本框对的数量有限制,您可以执行类似硬编码的操作,例如其中10个,但最初使用css属性使它们不可见。然后,您可以使用javascript / jQuery动态更改css属性。

如果你沿着这条路走下去,我会把每个标签和文本框放到一个div中,你可以分配一个固定的id并操纵这些div的属性,而不是用标签/文本框的ClientID进行操作。

答案 5 :(得分:0)

关于你的问题,如果你可以从后面的代码访问html控件,只要你有runat="server"
作为控件的一个属性,html控件就可以了从后面的代码访问。