我想通过Javascript向页面添加ASP:label
和ASP:textbox
控件。
<asp:Label ID="lblone" runat="server"></asp:Label>
如果我想写这个语法或者想要使用innerHTML在页面上添加这个标签,那么希望可以成为......
我想在按钮点击事件中添加它...并且ID应该附加1并且下一次添加1 + 1
答案 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控件就可以了从后面的代码访问。