C# 如何在ASP.NET中添加/读取项目
我有一组文本框,用户在其中输入内容,我在他们单击提交时使用它们。我需要添加一个按钮,让他们在运行中添加另一组相同的文本框,在这些文本框中输入数据,然后当按下提交按钮时,我需要从两组文本框中获取值。添加的项目集的数量可以是无限的 在ASP.NET/C中处理此类问题的最佳方法是什么 我环顾四周,基本上只得到了这样一个结论:您可以尝试在前端使用JQuery,这会让后端变得一团糟;或者您可以尝试使用GridView,每次都用可能变得一团糟的新项重新绑定它 有更好/更简单的方法吗C# 如何在ASP.NET中添加/读取项目,c#,asp.net,C#,Asp.net,我有一组文本框,用户在其中输入内容,我在他们单击提交时使用它们。我需要添加一个按钮,让他们在运行中添加另一组相同的文本框,在这些文本框中输入数据,然后当按下提交按钮时,我需要从两组文本框中获取值。添加的项目集的数量可以是无限的 在ASP.NET/C中处理此类问题的最佳方法是什么 我环顾四周,基本上只得到了这样一个结论:您可以尝试在前端使用JQuery,这会让后端变得一团糟;或者您可以尝试使用GridView,每次都用可能变得一团糟的新项重新绑定它 有更好/更简单的方法吗 感谢您的帮助。在这些情况
感谢您的帮助。在这些情况下,我通常使用Javascript处理客户端动态创建的其他文本框,然后在提交值之前,将所有数据收集到JSON对象中,并将JSON字符串保存到ASP.NET可以读取和解析的
控件中。这不是一种完全干净的方法,但这是我迄今为止发现的最好的方法。我会使用jQuery创建文本框(为它们分配唯一id),然后从请求中获取服务器上的值。表单键/值集合。这将是一个相当简单的解决方案。我建议采用GridView方式,并将其绑定到数据源对象,例如ObjectDataSource。单击add按钮将向数据源添加一个空行,GridView将自动绘制该空行。当一切正常时,您可以在添加行时使用UpdatePanel来实现平滑刷新。对第一组文本框使用Repeater控件,并对每个额外列表重复该控件
这是我的评论控制中继器。这有点神秘,因为这是我在asp.net中创建的第一个控件,但它应该可以让你继续
<asp:Repeater runat="server" ID="repeater"
onitemdatabound="repeater_ItemDataBound"
>
<HeaderTemplate>
<table border="0" cellpadding="0" cellspacing="0" width="100%">
</HeaderTemplate>
<FooterTemplate>
</table>
</FooterTemplate>
<ItemTemplate>
<tr id="trContents" runat="server"><td>
<table id="tableComment" runat="server"
width="100%" style="border-color:Black; border-width:1px; border-style:solid;background-color:#EEEE99">
<tr><td id="tdHeader" runat="server"
style="border-color:Black; border-width:1px; border-style:solid;padding: 5px">
<table width="100%" id="tableHeader" runat="server">
<tr>
<td>
<asp:Label ID="headerText" runat="server"
Text="<%# GetHeader((CommentRecord)Container.DataItem) %>" />
</td>
<td style="text-align:right"> <%-- OnClientClick="aspnetForm.target ='_blank';" --%>
<asp:Button ID="btnEdit" runat="server" Text="Edit"
PostBackUrl="<%$ AppSettings:TextEditor %>"
/>
<asp:Button ID="btnReply" runat="server" Text="Reply"
PostBackUrl="<%$ AppSettings:TextEditor %>"
/>
</td>
</tr>
</table>
</td></tr>
<tr><td style="border-color:Black; border-width:1px; border-style:solid;background-color:#FFFFF0;padding: 10px">
<%# ((CommentRecord)Container.DataItem).Text %>
</td></tr>
<tr><td>
<table width="100%"><tr>
<td style="text-align:left">
<asp:Button ID="btnDelete" runat="server" Text="Delete"
CausesValidation="False" />
</td>
<td style="text-align:right">
<asp:Label ID="footer" runat="server" Text="<%# GetFooter((CommentRecord)Container.DataItem) %>" />
</td>
</tr></table>
</td></tr>
</table>
<asp:PlaceHolder ID="placeHolder" runat="server" />
</td></tr>
</ItemTemplate>
</asp:Repeater>
您可以在页面的PreInit中将控件添加到ASP.NET,这将使它们参与常规页面生命周期,并在回发时重新填充。但是,如果您想添加控件而不回发到服务器,则需要在浏览器中处理它,这可能意味着使用javascript/jQuery。不管发生什么事,你也需要一些簿记;但另一种方法是使用ASP.NET数据控件,如DataRepeater或DataGrid。我从未使用过类似的东西。您使用/看到的任何链接都可以了解它吗?对于.NET端的JSON解析,我使用。对于动态生成DOM对象,我建议使用JQuery。我在谷歌上搜索了有关如何使用JQuery动态添加表单元素的信息,并提出了一个新的解决方案。