从后面的代码中获取可排序列中掉落项目的值
Get values of dropped items in sortable comuns from code behind
我已经在我的网页上实现了拖放 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() 上的 repeter databound 限制
DivisionSource.DataSource = DivResultSource
DivisionSource.DataBind()
DivisionDest.DataSource = DivResultDest
DivisionDest.DataBind()
访问数据的隐藏代码:
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。
您尝试在客户端通过拖放添加服务器端控件。服务器控件在服务器端呈现,您无法按照自己的方式进行操作。因此,控件会添加到浏览器(客户端)中的转发器,但当页面 post 支持 DivisionSource.items
计数与默认值相同时,它们不可用。
If you want to do it, you can use hidden field
or session
.
我最终做的是能够从 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 中给你排序,你可以做 .lenght 和其他函数来计算项目的数量,如果你想限制用户的限制。
我已经在我的网页上实现了拖放 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() 上的 repeter databound 限制
DivisionSource.DataSource = DivResultSource
DivisionSource.DataBind()
DivisionDest.DataSource = DivResultDest
DivisionDest.DataBind()
访问数据的隐藏代码:
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。
您尝试在客户端通过拖放添加服务器端控件。服务器控件在服务器端呈现,您无法按照自己的方式进行操作。因此,控件会添加到浏览器(客户端)中的转发器,但当页面 post 支持 DivisionSource.items
计数与默认值相同时,它们不可用。
If you want to do it, you can use
hidden field
orsession
.
我最终做的是能够从 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 中给你排序,你可以做 .lenght 和其他函数来计算项目的数量,如果你想限制用户的限制。