2010-12-20 111 views
6

我有一個div元素,其中包含一個ul元素,該元素在頁面首次加載時從空開始。然後,用戶可以將li元素拖入此div框中,該框將填充ul元素。我需要能夠保留添加到ul容器的li元素,以便在回發後顯示li元素。我怎樣才能做到這一點?保存客戶端html更改

<div class="sidebar-drop-box">    
       <p class="dropTitle"><strong>Drop Box</strong><br /> 
        Drag and drop tracks here temporarily if you’re working with a long playlist.</p> 
       <ul class="admin-song-list"></ul> 
     </div> 

拖放是用javascript和jquery完成的。所有這些都在asp.net頁面上。當拖拽完成這是執行

function AddToDropBox(obj) { 
    $(obj).children(".handle").animate({ width: "20px" }).children("strong").fadeOut(); 
    $(obj).children("span:not(.track,.play,.handle,:has(.btn-edit))").fadeOut('fast'); 
    $(obj).children(".play").css("margin-right", "8px"); 
    $(obj).css({ "opacity": "0.0", "width": "284px" }).animate({ opacity: "1.0" }); 
    if ($(".sidebar-drop-box ul").children(".admin-song").length > 0) { 
     $(".dropTitle").fadeOut("fast"); 
     $(".sidebar-drop-box ul.admin-song-list").css("min-height", "0"); 
    } 
    if (typeof SetLinks == 'function') { 
     SetLinks(); 
    } 

所以我想下面這段代碼要經過,並得到所有被假設是在下拉框,並把它們放回去的元素代碼。但它沒有把它們添加到它所做的更改到主列表

//repopulate drop box 
    if(document.getElementById("ctl00_cphBody_hfRemoveMedia").value!="") 
     { 
      var localRemoveMedias=document.getElementById("ctl00_cphBody_hfRemoveMedia").value.split(","); 
      $(".admin-left li.admin-song").each(function(){ 
//    alert("inEach");//WORKS 
       for(x in localRemoveMedias) 
       { 
        if($(this).attr("mediaid")==localRemoveMedias[x]) 
        { 
         AddToDropBox($(this)); 
        } 
       }//end for 
      });//function(){ 
     } 
+3

您可能希望提供一些更多信息,例如特別用於執行拖放操作的框架。這些工具中的每一種都有不同的方式來實現你想要的。 – NotMe 2010-12-20 19:20:28

+3

當在客戶端完成放置來存儲狀態時,不會向服務器發出AJAX請求,從而使您可以執行所需操作?我可能會感到困惑。我不知道回傳是在哪裏更新到服務器... – gbvb 2011-02-08 22:22:28

+0

您是否嘗試將控件的'.innerHtml'屬性作爲字符串發送到服務器?也許在你的控件中設置'runat = server',你可以在提交整個頁面時自動獲取更新的內容。 – BertuPG 2011-02-11 13:06:02

回答

1

要保留整個回傳你的拖累因素,我建議您存儲元素的ID在ASP的下拉框:hiddenfield爲你的用戶做他的阻力/放置操作。

當發生回發時,您的ID將被保留,您將能夠像回發之前一樣重新創建頁面狀態。

0

對於拖放操作,通常不需要回發。您可以使用Ajax來完成服務器端更新,這將完全消除頁面狀態的創建。

0

蘋果和桔子。你爲什麼張貼回來?當我開始使用Ajax時,我也在做同樣的事情。我有一個不錯的Ajax功能和一大堆舊式的狀態驅動viewstateenabled =「真正」好舊的.net在一個頁面。是我們在過去的10年中所吃的東西。當我在客戶端上創建這些更改時,我正在保存這些更改的狀態,然後在服務器上進行操作以維護回發之間的更改。我發現使用回傳的次數越少,我越是在無狀態的狀態下發展。如果您可以避免發佈回調服務器的Ajax調用並執行您必須執行的操作,請返回結果並相應地重新繪製。