none
asp.net 删除数据后不重新加载所有数据问题 RRS feed

  • 問題

  • 有一个Repeater列表带分页,假如有2页,现在在第二页,怎样在第二页中的某条数据被删除成功时只加载第二页的内容,而不是加载全部数据,如果加载全部数据的话,它将自动跳转到第一页了。

     <asp:Repeater ID="rptDatalist" runat="server">
                                <ItemTemplate>
                                    <tr id="tr<%#Container.ItemIndex.ToString() %>">

                                          <td class="tdBody tableStyle"  style=" padding-top:5px;">
                                         <img src="../Img/small.jpg" onclick="del(<%#Container.ItemIndex.ToString()%>);"
                                                style="cursor: pointer;" />
                                        </td>

                                   </tr>

                             </ItemTemplate>

    </asp:Repeater>

    function del(dataid, itemindex) {
                if (confirm("确认要删除数据?")) {
                    var url = "";
                    $.post(url, function (data) {
                        if (data.toString() != "") {
                            alert(data.toString());
                        }
                        else {
                            $("#tr" + itemindex).remove();
                        }
                    }); //删除数据
                }
            }

    上面的方法虽然可以删除数据,但是他删除的是某个tr,删除成功后 ,排序的顺序就会断开,比如有1,2,3,4条数据,第三个删除成功后,顺序就变为,1,2,4这样,我想不想调用window.reload()事件,怎样只加载删除页所在的页面呢


    2012年9月21日 上午 04:57

解答

  • Repeater 分頁?

    您的分頁怎麼做的呢?

    另外,如果您是要用JavaScript做,那就只要focus在html的DOM就好。只需要使用jQuery去操作你的DOM即可。

    最後,您的發問描述的不是很清楚,刪除後順序的部份,搞不太懂您的需求究竟是什麼?

    既然您會用ajax,那就完全不用管Repeater這件事了,$.post過去server端,把資料刪除後,再把新的資料撈出來一次,依據您的page index,以及page size,就可以算出,您要取得整個資料集合中,第幾筆到第幾筆,是屬於您畫面要顯示的這一頁資料。

    整個流程大概如下:

      • client端透過ajax,呼叫server端程式,刪除該筆資料(需傳遞該筆資料的pkey, 頁面的page index以及page size)
      • server程式撈最新的資料集合出來
      • 透過page index與page size,可以算出來要取得最新集合的第N筆到第M筆資料,透過LINQ的skip()與take(),就可以取得資料
      • client接收到ajax success後,在callback function中,把server端回傳的資料,重新用javascript binding到頁面上即可。

    授人以魚,三餐之需;授人以漁,終生之用。
    希望各位發問的朋友,得到的是如何釣魚的知識。之後也可以分享給別人,釣魚的知識。而不是肚子餓了,就上來討魚吃。

    若您的程式碼有SQL injection的問題,在修改完畢之前,我不願意給您任何解答。因為解決了您的程式問題,造成更大的系統漏洞問題,還不如讓程式壞掉。

    請參考:SQL injection簡介與解決方式

    常用資源參考:


    小弟的blog: In 91,wiki: my wiki

    • 已標示為解答 阿拉赛 2012年9月21日 上午 08:35
    2012年9月21日 上午 05:07
    版主

所有回覆

  • Repeater 分頁?

    您的分頁怎麼做的呢?

    另外,如果您是要用JavaScript做,那就只要focus在html的DOM就好。只需要使用jQuery去操作你的DOM即可。

    最後,您的發問描述的不是很清楚,刪除後順序的部份,搞不太懂您的需求究竟是什麼?

    既然您會用ajax,那就完全不用管Repeater這件事了,$.post過去server端,把資料刪除後,再把新的資料撈出來一次,依據您的page index,以及page size,就可以算出,您要取得整個資料集合中,第幾筆到第幾筆,是屬於您畫面要顯示的這一頁資料。

    整個流程大概如下:

      • client端透過ajax,呼叫server端程式,刪除該筆資料(需傳遞該筆資料的pkey, 頁面的page index以及page size)
      • server程式撈最新的資料集合出來
      • 透過page index與page size,可以算出來要取得最新集合的第N筆到第M筆資料,透過LINQ的skip()與take(),就可以取得資料
      • client接收到ajax success後,在callback function中,把server端回傳的資料,重新用javascript binding到頁面上即可。

    授人以魚,三餐之需;授人以漁,終生之用。
    希望各位發問的朋友,得到的是如何釣魚的知識。之後也可以分享給別人,釣魚的知識。而不是肚子餓了,就上來討魚吃。

    若您的程式碼有SQL injection的問題,在修改完畢之前,我不願意給您任何解答。因為解決了您的程式問題,造成更大的系統漏洞問題,還不如讓程式壞掉。

    請參考:SQL injection簡介與解決方式

    常用資源參考:


    小弟的blog: In 91,wiki: my wiki

    • 已標示為解答 阿拉赛 2012年9月21日 上午 08:35
    2012年9月21日 上午 05:07
    版主
  • 嗯,你说的是很有道理我自己再琢磨琢磨,我的分页是用Repeater控件和AspNetPager分页组件实现的
    2012年9月21日 上午 05:15