如何在运行时创建插入到新生成的HTML中的新控件?

时间:2013-03-21 09:36:09

标签: c# asp.net html

我仍然是ASP.NET的新手,但我发现自己陷入了一个不应该出现问题的问题。

现在我有一个包含此div的页面:

<div id="EditSurveySetID" class="EditSurveySet" runat="server">
        <div class="cell">
                <div class="cell_title">Survey Set(s)</div>
                <table id="surveySetTableData" runat="server" style="margin: 10px;">
                    <tbody>
                        <tr>
                            <td class="form_labelSurveySet" style="width: 330px;">
                                <input type="button" value="-"> Survey Set 1: 
                                <input id="EditSurveySetTitle" runat="server" style="width: 200px;" value="Netherlands">
                            </td>
                            <td>
                                <asp:DropDownList ID="DDLSurveySetSurveys" runat="server">
                                </asp:DropDownList>
                                <asp:Button ID="addAdditionalDDLColumns" runat="server" Text="+" />
                            </td>
                        </tr>
                   </tbody>
            </table>
        </div>
    </div>

看起来像这样: enter image description here

我希望用户按下+按钮(addAdditionalDDLColumns)。按下该按钮后,我想要一个新的表格行显示,其中包含相同的控件,因此在运行时,它在这一点上看起来像这样:

<div id="EditSurveySetID" class="EditSurveySet" runat="server">
        <div class="cell">
                <div class="cell_title">Survey Set(s)</div>
                <table id="surveySetTableData" runat="server" style="margin: 10px;">
                    <tbody>
                        <tr>
                            <td class="form_labelSurveySet" style="width: 330px;">
                                <input type="button" value="-"> Survey Set 1: 
                                <input id="EditSurveySetTitle" runat="server" style="width: 200px;" value="Netherlands">
                            </td>
                            <td>
                                <asp:DropDownList ID="DDLSurveySetSurveys" runat="server">
                                </asp:DropDownList>
                                <asp:Button ID="addAdditionalDDLColumns" runat="server" Text="+" />
                            </td>
                        </tr>

                        <tr>
                            <td class="form_labelSurveySet" style="width: 330px;">
                                <input type="button" value="-"> Survey Set 2: 
                                <input id="Text1" runat="server" style="width: 200px;" value="Netherlands">
                                </td>
                            <td>
                                <asp:DropDownList ID="DropDownList1" runat="server">
                                </asp:DropDownList>
                                <asp:Button ID="Button1" runat="server" Text="+" />
                            </td>
                        </tr>
                                       </tbody>
            </table>
        </div>
    </div>

或者在图片中: enter image description here 所以我看到的方式是,在+按钮点击事件上生成了一些新的HTML代码,以及一些控件(下拉列表,另一个具有相同功能的按钮+?),可能是文本字段而不是输入字段。

现在想到的问题:

  • 如何生成可创建新表格行的HTML代码
  • 如何控制添加此生成的HTML代码的位置(在这种情况下,它应该在现有的
  • 下)
  • [模糊/抽象问题]最终,用户可能拥有1到无限的“调查集”。如果用户创建了4个调查集,他最终会按下保存按钮或类似的东西。按下此按钮后,我将保存属于4个调查集的4个下拉列表中的4个选定值。我如何调用每个单独的下拉列表以获取数据?我想,我实际上要问的是,是否可以在自动生成的下拉列表创建前两个问题时以编程方式分配ID。

我该怎么做?任何建议和提示都非常受欢迎!!

3 个答案:

答案 0 :(得分:1)

您可以使用UpdatePanel并在代码隐藏中动态添加新的asp控件。

这可能很昂贵,因为这意味着每次用户点击“添加”按钮时你的应用程序都会回到服务器,但是我不确定你是如何在客户端严格实现这一点的。但是没有什么能阻止你使用asp.net在服务器端动态创建新的控件。

如果您想使用自定义HTML包围新控件,可以使用PlaceHolder组件并在回调期间将其替换为原始文本(您的HTML)。

答案 1 :(得分:1)

我建议您使用GridView 它提供了添加行的选项。它提供了一个Rows集合,因此您可以获取绑定到每一行的数据。

以下some examples可帮助您入门。

动态创建,添加和维护控件需要付出一些努力。你需要一个PlaceHolder并且必须添加控件。您必须为每个ID分配唯一ID,并使用它们来检索值。这必须在每个PostBack上完成 当你不觉得自己是asp.net的新手时试试这个。

答案 2 :(得分:0)

protected void Button1_Click(object sender,EventArgs e)

{

    HtmlTableRow tr = new HtmlTableRow();
    HtmlTableCell td = new HtmlTableCell();
    Button btn=new Button();
    btn.Text="gdfgd"; /* here u can create ur contol and add it in cell*/
    td.Controls.Add(btn); /*add controls to colum*/
    tr.Cells.Add(td); /*add column to row*/
    surveySetTableData.Rows.Add(tr); /*ad row to table*/
}

而不是使用这个我也建议你使用gridview像nunespaqscal bcz dataretrival变得非常容易....在gridview