【问题标题】:jQuery DOM manipulation of table lost after submit提交后丢失表的jQuery DOM操作
【发布时间】:2011-04-04 07:21:32
【问题描述】:

基于文本框“自动完成”功能,用户可以在结果列表中进行选择,然后用户将选择其中一个结果并将其添加到“篮子”中,用户执行多个快速搜索并添加或删除项目从这个篮子里。

目前我用一张桌子作为“篮子”。一旦用户对篮子感到满意,用户就会将篮子提交给服务器,服务器会循环遍历篮子并更新数据库。

我正在尝试使用 jQuery 操作表格,问题是一旦回发发生,DOM 操作就会被删除。

表格如下所示。

 <asp:Table ID="Basket"
 runat="server"
 EnableViewState="False">
     <asp:TableHeaderRow TableSection="TableHeader">
         <asp:TableHeaderCell>ID</asp:TableHeaderCell>
         <asp:TableHeaderCell>Name</asp:TableHeaderCell>
         <asp:TableHeaderCell>Quantity</asp:TableHeaderCell>
     </asp:TableHeaderRow> </asp:Table>

使用 jQuery,我可以修改表格、添加行、删除它们,一切都很好。然后我有一个提交按钮

&lt;asp:Button ID="Button1" runat="server" Text="Submit" onclick="Button1_Click" /&gt;

在按钮的 Click 事件中,我循环遍历表格的行

foreach (TableRow row in this.Basket.Rows)
{
            if (row.TableSection != TableRowSection.TableBody) { continue; }
}

这就是问题所在,表被重置为仅包含 1 行的初始状态。考虑到我已经禁用了 ViewState,我认为控件会模仿回发的内容。但显然有什么东西让它重置了。

【问题讨论】:

    标签: c# jquery asp.net webforms


    【解决方案1】:

    您认为这一切都错了,Javascript 是前端,如果您不告诉服务器已添加行,它永远不会知道,因此它只会按照您的指示添加一行。

    您需要以某种方式保存这些值

    【讨论】:

    • 本意是只在该页面上创建一个“篮子”,并执行批量提交,一旦提交了商品的id和数量存储在服务器端,这样可以防止不断的喋喋不休,并使用户界面更像桌面
    • 是的。我同意那个。 JS 是一种客户端技术,你需要实现 JS 客户端代码和你的服务器端代码之间的通信。如果不以某种方式将更新提交到服务器端,怎么知道呢? HTTP 是一种断开连接的协议。
    • 你可以这样做,到目前为止,这不是唯一的方法,但是:我会将值添加到隐藏字段(在 JSON 中)并在服务器端解析它。跨度>
    • @Elad Lachmi 提交按钮的要点是遍历刚刚发布的表单帖子中的数据,我知道我可以创建一个隐藏字段并压缩我在表格中写的内容成一个字符串,然后解析该字符串,但是当表的形式是发布请求的一部分时感觉很傻:)
    • @thmsn 您正在考虑作为一个有状态的环境,而实际上它是无状态的,AFAIK ASP:table 不会记住您对表的更改,因为它们没有提交给服务器
    猜你喜欢
    • 2012-04-11
    • 2015-10-14
    • 2018-04-16
    • 2016-04-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-08
    • 2012-06-17
    相关资源
    最近更新 更多