【发布时间】:2013-12-19 13:44:26
【问题描述】:
我有以下中继器:
<asp:Repeater ID="_List" runat="server" DataSource="<%# GetList() %>">
<HeaderTemplate>
<table class="dataList">
<tr>
<th>Name</th>
</tr>
</HeaderTemplate>
<ItemTemplate>
<tbody class="list-item">
<tr>
<td runat="server">
<asp:DropDownList ID="_Name" runat="server" DataSource='<%# GetEmployeeList() %>'
DataTextField="Name" DataValueField="Value" />
</td>
</tr>
</tbody>
</ItemTemplate>
<FooterTemplate>
<tr>
<td colspan="3"></td>
<td>
<a id="_Add">Add</a>
</td>
</tr>
</table>
当用户单击“_Add”按钮时,我想在客户端使用 JQuery 动态添加新行。
我能够成功地使用 JQuery clone() 方法来做到这一点。在添加新项目(例如 name="$ctl01$_Name" 和 id="_Name_0" ...等)后,我还成功地重新同步中继器内的 ID 以保持顺序
但是,当用户提交表单时,ASP.NET 无法识别使用 JQuery 从客户端动态添加的项目。
即该列表最初有 2 个项目。我又添加了 3 个项目。而不是 Repeater.Items.Count 总共得到 5 个项目,我在回发时只得到 2 个项目。
任何想法我错过了什么??
提前谢谢大家!
【问题讨论】:
-
ASP.Net 需要将来自客户端的数据与来自服务器的数据进行匹配。因此,如果您在客户端添加新项目,但不会在服务器端创建新项目,那么服务器端的转发器只会忽略来自客户端的数据。
-
@SergeyLitvinov,感谢您的快速回复。如何同步客户端和服务器中继器以匹配?
-
这是个好问题。您能否显示用于服务器端转发器的代码?喜欢你使用 DataSource 还是手动创建它们等等
-
@SergeyLitvinov,这没什么花哨的;当中继器调用 DataSource= 时,我只返回了一个 List
对象。当在 Page_Load(如果不是 IsPostback)上调用 this.DataBind() 时,转发器将绑定到此方法。
标签: jquery asp.net webforms repeater