Переупорядоченный список Ajax не перетаскивается
У меня та же проблема, что и у Саймона в этом посте.
Он нашел какое-то решение, но оно у меня не работает. Пожалуйста, может кто-нибудь объяснить мне, что происходит в этом ответе или посоветовать мне что-нибудь еще.
PS: на сайте asp.net есть пример, который не работает точно так же, как мой список повторного заказа... (нажмите посмотреть демонстрацию)
Предлагаемое здесь решение добавляет эти несколько строк в web.config:
<httpHandlers>
<add path="ScriptResource.axd" verb="GET,HEAD" type="System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" validate="false"/>
</httpHandlers>
Возможно, мне просто нужно что-то изменить, чтобы это заработало... но я не знаю что. Например, я понятия не имею, каким должен быть ScriptResource.axd.
Мой код: файл.aspx
<%@ Page Title="" Language="C#" MasterPageFile="~/editor/editor_template.Master" AutoEventWireup="true" CodeBehind="menuEditor.aspx.cs" Inherits="WebPageEditor.editor.menuEditor" %>
<%@ Register Assembly="AjaxControlToolkit" Namespace="AjaxControlToolkit" TagPrefix="asp" %>
<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
<asp:ScriptManager ID="ScriptManager1" runat="server" EnablePartialRendering="true">
</asp:ScriptManager>
<asp:UpdatePanel ID="UpdatePanel1" runat="server">
<ContentTemplate>
<asp:ObjectDataSource ID="ObjectDataSource1" runat="server"
DeleteMethod="DeleteMenu" InsertMethod="InsertMenu" SelectMethod="SelectMenu"
TypeName="WebPageEditor.editor.MenuSourceManager" UpdateMethod="UpdateMenu"
>
<DeleteParameters>
<asp:Parameter Name="ID" Type="Int32" />
</DeleteParameters>
<InsertParameters>
<asp:Parameter Name="name" Type="String" />
<asp:Parameter Name="url" Type="String" />
<asp:Parameter Name="order" Type="Int32" />
</InsertParameters>
<UpdateParameters>
<asp:Parameter Name="ID" Type="Int32" />
<asp:Parameter Name="name" Type="String" />
<asp:Parameter Name="url" Type="String" />
<asp:Parameter Name="order" Type="Int32" />
</UpdateParameters>
</asp:ObjectDataSource>
<asp:ReorderList ID="ReorderList1" runat="server" AllowReorder="True"
DataSourceID="ObjectDataSource1" PostBackOnReorder="False"
ShowInsertItem="True" SortOrderField="order" DataKeyField="ID"
ItemInsertLocation="Beginning">
<ItemTemplate>
<div class="menuEditor">
» <%# Eval("name") %>
<asp:LinkButton ID="LinkButton1" runat="server" CommandName="Edit">LinkButton</asp:LinkButton>
</div>
</ItemTemplate>
<DragHandleTemplate>
<img src="ico/moveHandle_ico.gif"
alt='<asp:Literal ID="Literal1" runat="server" Text="<%$ Resources: editorLocalization, ME_moveHandleTT %>" />'
style="cursor:move; width:35px;" />
</DragHandleTemplate>
<ReorderTemplate>
<asp:Panel runat="server" />
</ReorderTemplate>
<InsertItemTemplate>
<asp:Panel ID="panel1" runat="server" DefaultButton="Button1">
<asp:TextBox ID="TextBox1" runat="server" Text=' <%# Bind("name") %>' ValidationGroup="add" />
<asp:Button ID="Button1" runat="server" CommandName="Insert" Text="Add" ValidationGroup="add" />
<asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server" ValidationGroup="add"
ErrorMessage="Please enter some text" ControlToValidate="TextBox1" />
</asp:Panel>
</InsertItemTemplate>
<EditItemTemplate>
<asp:TextBox ID="TextBox2" runat="server" Text='<%# Bind("name") %>' ValidationGroup="edit" />
<asp:TextBox ID="TextBox3" runat="server" Text='<%# Bind("url") %>' ValidationGroup="edit" />
<asp:TextBox ID="TextBox4" runat="server" Text='<%# Bind("order") %>' ValidationGroup="edit" />
<asp:LinkButton ID="LinkButton1" runat="server" CommandName="Update">LinkButton</asp:LinkButton>
</EditItemTemplate>
</asp:ReorderList>
</ContentTemplate>
</asp:UpdatePanel>
</asp:Content>
и код позади
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.IO;
namespace WebPageEditor.editor
{
public class MenuSourceManager
{
public static List<MenuItem> menuItems;
#region DataBindMethods
//[System.ComponentModel.DataObjectMethod(System.ComponentModel.DataObjectMethodType.Select)]
public List<MenuItem> SelectMenu()
{
return menuItems;
}
public void UpdateMenu(int ID, string name, string url, int order)
{
menuItems[ID].Name = name;
menuItems[ID].Url = url;
menuItems[ID].Order = order;
}
public void InsertMenu(string name, string url, int order)
{
menuItems.Add(new MenuItem(name, url, order, menuItems.Count));
}
public void DeleteMenu(int ID)
{
menuItems.RemoveAt(ID);
}
#endregion
}
public class MenuItem
{
public MenuItem(string name, string url, int order, int ID)
{
Name = name; Url = url; Order = order; this.ID = ID;
}
public string Name { get; set; }
public string Url { get; set; }
public int Order { get; set; }
public int ID { get; set; }
}
}
Я загружаю данные в коллекцию List из события page_load, но это прекрасно работает. Привязка данных также работает. Проблема в том, что элементы не могут быть переупорядочены - во время переупорядочения значение сортировки не изменяется и список не обновляется.
2 ответа
Я решил не полагаться на Microsoft и тратить свое время, пытаясь настроить этот элемент управления и, конечно, сначала заставить его работать.
Поэтому я создал контроль сам. У него есть некоторые слабые стороны (например, он полностью работает только в IE в режиме совместимости или в более поздних версиях) и по сравнению с элементом управления Ajax он, конечно, менее гибок, но для меня этого вполне достаточно.
Для тех, кто интересуется результатом, вот небольшая демонстрация: http://machta.aspone.cz/editor/menuEditor.aspx
имя пользователя: machta
пароль: 123456
Изменения сохраняются после того, как вы покинете страницу (или после перезагрузки). Вы можете увидеть результат здесь: http://machta.aspone.cz/editor/src/home.aspx
Добавьте это событие с вашим тегом списка переупорядочения
OnItemReorder="ReorderList1_ItemReorder"
Теперь на коде добавить этот код:
protected void ReorderList1_ItemReorder(object sender, AjaxControlToolkit.ReorderListItemReorderEventArgs e)
{
//write your logic here to sort order change.
}