我想知道是否将数据存储在viewstate中对于这个给定的问题是个好主意。 他是我想要实现的简化示例,首先我们有一个Repeater控件:
<asp:Repeater id="Repeater1" runat="server">
<ItemTemplate>
<asp:TextBox id="Name" runat="server" />
<asp:TextBox id="Age" runat="server" />
</ItemTemplate>
</asp:Repeater>
<asp:TextBox id="NewPersonName" runat="server" />
<asp:TextBox id="NewPersonAge" runat="server" />
<asp:Buttin id="Button1" runat="server" Text="Add" OnClick"Button1_Click"/>
为了简单起见,我将放弃数据绑定代码,因为它可以在当前的人员和年龄列表中加载并完美绑定。
问题在于底部的3个控件,我想要的是用户能够键入新条目,单击添加按钮,然后将其添加到Repeater,但不会持久保存到数据库。
用户应该能够在列表中添加多个名称,然后单击“保存”按钮一次性提交所有新名称,而不是为每个条目提交。
答案 0 :(得分:1)
您是在视图状态中仅保留数据库中的整个列表还是只是未提交的附加内容?
如果它只是添加,那么这是一个很好的使用viewstate。
如果数据库中的列表不是很大或不稳定,那么我想也没关系。
答案 1 :(得分:1)
我使用DataTable对象并将其存储在用户的会话中。这样,您可以在每次添加/修改/删除时快速进行数据绑定,并且可以在处理完成后将其清除出会话。此外,如果认为有必要,您可以在单独的页面上轻松访问用户列表。
编辑:另一个警告是,如果有必要,您可以轻松地删除DataView,您需要对用户列表进行快速排序/过滤。
答案 2 :(得分:1)
我使用javascript并将其存储在对象数组中。然后,客户端将引用javascript数组来构建UI。
您可以查看一些javascript框架,如yahoo yui,script.aculo.us,jQuery等。
答案 3 :(得分:1)
我会用两种方式处理这个问题。第一个是JS数组,并且客户端添加到转发器/查看机制。
另一种选择是在我的数据库中有一个表,我存储这些未提交的附加内容,然后只是将它们查询回来。
事实上,我可能会将两者结合起来。在我为显示器构建新节点时,使用AJAX以异步方式将数据发送到未提交的列表表。
在SAVE / COMMIT按钮上,我将异步发送提交命令到服务器,这将用户的项从未提交的表移动到提交的表。