使用JQuery在客户端动态添加ASP.NET Repeater项

时间:2013-12-18 23:49:06

标签: jquery asp.net webforms repeater

我有以下转发器:

<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()方法来完成此任务。我还成功地在转发器中重新同步转发器中的ID,以便在添加新项目后(例如name =“$ ctl01 $ _Name”和id =“_ Name_0”等等)

但是,当用户提交表单时,ASP.NET无法使用JQuery从客户端识别动态添加的项目。

即。该列表最初有2个项目。我已经添加了3个项目。而不是Repeater.Items.Count总共得到5个项目,我回发时只收到2个项目。

任何想法我错过了什么?

提前全部谢谢!

2 个答案:

答案 0 :(得分:1)

嗯,用JQuery在客户端做这件事并不容易。中继器保存其ViewState中的项目数,然后重新创建它们。此行数很难更新,但在这种情况下,它将验证控件。对于新控件,它将抛出异常,因为它们未在页面中注册。管理此验证的属性是EnableEventValidation,但将其更改为false并不是一种好的做法....

你可以在服务器端做,然后它应该工作。您可以将Add按钮设置为LinkBut​​ton,并在服务器端处理它以为GetList源创建新项目,然后您可以再次尝试调用DataBind,因此它将为新项目再显示一行。它不是很好,因为每个Add都会向服务器发出新请求,但是在转发器的情况下很难实现这样的事情。 GridView也会遇到同样的问题,因为它还会在ViewState中存储信息。

答案 1 :(得分:1)

在我看来,如果你使用asp:repeater,最好的方法是使用asp:UpdatePanel并在代码隐藏中做你想要的...

当我想用jquery / js做你需要的东西时,我不使用asp:repeater,我使用带js的基本html和带有js触发回发的HiddenField,或直接使用通用处理程序和手动AJAX < / p>

相关问题