Переупорядоченный список Ajax не перетаскивается - PullRequest
3 голосов
/ 29 сентября 2010

У меня та же проблема, что и у Саймона в этом посте .

Он нашел какое-то решение, но оно у меня не работает.Пожалуйста, может кто-нибудь объяснить мне, что происходит в этом ответе или посоветовать мне что-нибудь еще.

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">
            &raquo;   <%# 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 ]

2 голосов
/ 08 октября 2010

Добавьте это событие с помощью тега списка переупорядочения

OnItemReorder="ReorderList1_ItemReorder"

Теперь в коде позади добавьте этот код:

protected void ReorderList1_ItemReorder(object sender, AjaxControlToolkit.ReorderListItemReorderEventArgs e)
        {
//write your logic here to sort order change.
}
0 голосов
/ 17 декабря 2010

Я решил не полагаться на Microsoft и тратить свое время, пытаясь настроить этот элемент управления и, конечно, сначала заставить его работать.

Итак, я создал контроль сам. У него есть некоторые слабые стороны (например, он полностью работает только в IE в режиме совместимости или в более поздних версиях) и по сравнению с элементом управления Ajax он, конечно, менее гибкий, но для меня этого вполне достаточно.

Для тех, кто интересуется результатом, вот небольшая демонстрация: http://machta.aspone.cz/editor/menuEditor.aspx

имя пользователя: machta

пароль: 123456

Изменения сохраняются после того, как вы покинете страницу (или после перезагрузки). Вы можете увидеть результат здесь: http://machta.aspone.cz/editor/src/home.aspx

...