2017-10-09 18 views
1

私は自分のWebページにドラッグアンドドロップjqueryを実装しています。ユーザーの選択に従ってコードの背後にある列を読み込み、ユーザーは必要に応じてそれらを編集できます。しかし、私は、宛先列で選択された項目を取得しようとしているとき、そのrepeater.items数はゼロであり、ソースrepeater.itemsはページの読み込み時と同じにカウントされます。ここにコードがあります。ソート可能なコミュンズでドロップされたアイテムの値をコードの後ろから取得します

<div class="Content" id="DragAndDrop" style="width: 100%; display: flex; justify-content: center; font-size: 9px;"> 
        <ul id="sortable1" class="connectedSortable" style="width: 45%; border: groove"> 
         <asp:Repeater ID="DivisionSource" runat="server"> 
          <ItemTemplate> 
           <%--<li class="ui-state-default" id="lblSource" ><%# Eval("DivisionName") %></li>--%> 
           <li class="ui-state-default" > 
            <asp:Label id="lblSource" runat="server" Text='<%# Eval("DivisionName") %>' ></asp:Label> </li> 
          </ItemTemplate> 
         </asp:Repeater> 
        </ul> 
        <ul id="sortable2" class="connectedSortable" style="width: 45%; border: groove; list-style: none"> 
         <asp:Repeater ID="DivisionDest" runat="server" > 
          <ItemTemplate> 
           <li class="ui-state-default" > 
            <asp:Label id="lblDest" runat="server" Text='<%# Eval("DivisionName") %>' ></asp:Label> </li> 
           <%-- <li class="ui-state-default" id="<%# Eval("DivisionID") %>" style="display: none;">SAP: Strategizing Activities and Practices</li>--%> 
          </ItemTemplate> 
         </asp:Repeater> 
        </ul> 
       </div> 

データは、データへのアクセスにpageload()

DivisionSource.DataSource = DivResultSource 
       DivisionSource.DataBind() 

       DivisionDest.DataSource = DivResultDest 
       DivisionDest.DataBind() 

コードの後ろにrepeterデータ・バインドで囲まれています。ポストバックで

Dim DivisionSource As Repeater = Wizard1.FindControl("DivisionSource") 
Dim DivisionDest As Repeater = Wizard1.FindControl("DivisionDest")  
Dim SelectedDivisionvalue As String = Nothing 
           Dim i As Integer = 1 
           For Each item As RepeaterItem In DivisionDest.Items 
            If (item.ItemType = ListItemType.Item) Then 


             Dim lblValue As Label = CType(item.FindControl("lblDest"), Label) 
             SelectedDivisionvalue = lblValue.Text 
             i += 1 
            End If 
           Next 

を、DivisionSource.itemsはデフォルト時と同じです数えますページがロードされ、DivisionDest.items数が0です。

答えて

0

私がやったことは、javascrip関数からソースとデスティネーションの両方のリペーターの順序を取得できたことです。私は隠された変数の順序の値を保存し、それをコードの背後に渡しました。ここで私は注文を得ることができた方法です。

$("#sortable1, #sortable2").sortable({ 
connectWith: ".connectedSortable", 
    receive: function (event, ui) { 
     // alert('Receive!'); 

     var $self = $(this); 
     var $item = ui.item; 
     var $sender = ui.sender; 
     if ($(event.target).attr("id") == "sortable2") { 

      var order1 = $sender.sortable('toArray').toString(); 
      var order2 = $self.sortable('toArray').toString(); 

      //alert("Order 1:" + order1 + "\n Order 2:" + order2); 
      } 
     }, 
}).disableSelection(); 

この

var order2 = $self.sortable('toArray') 

はあなたがArrayListのに注文与えるだろうし、あなたがにユーザを制限するために弱々しい場合はアイテムの一切をcalcaulateする.lenghtや他の機能を実行することはできません限界。

1

クライアント側のドラッグアンドドロップでols。サーバーコントロールはサーバー側でレンダリングされ、自分のやり方ではできません。したがって、コントロールはあなたのブラウザ(クライアント側)のリピータに追加されますが、DivisionSource.itemsの数のバックポストがデフォルトと同じになっているときには利用できません。

hidden fieldまたはsessionを使用してください。

+0

答えをありがとう、私の答えを参照してくださいどのように私はそれをしました。あなたの答えは正しい方向に導かれました。 – Arpan

関連する問題