1

我们想将 Orchard 用于网站。我们正在为该 cms 创建一个自定义模块/小部件,并且在该模块中,我们希望使用 DevExpress 的 GridView 来显示数据。我们得到了大部分工作,但我们无法让回调工作。我的意思是浏览页面、排序行和移动列。

如果我们查看控制台,我们可以看到 javascript 和 ajax 回调从未执行,我们无法弄清楚为什么会这样。我在 DevExpress 站点和这个站点上找到了一些关于将 DevExpress 与 Orchard 一起使用的主题,但我在这些站点中找不到任何有用的内容(对我而言)。我们还注意到,我们的控制器的方法从未被调用,但不知道为什么不被调用。

我发现有时 jQuery 会导致 DevExpress 控件出现问题,所以我尝试删除所有 jQuery 脚本,但这并没有什么不同。有人还建议在 te gridview 周围放置一个回调面板,但这也不起作用。我尝试了更多的东西(我大多已经忘记了),但到目前为止没有任何效果。

我还在Orchard 论坛结束的DevExpress 网站上问了同样的问题,但我在那里没有得到任何答案,所以我想我会在这里试试运气。

我已经做了一个示例项目,以防你想看看我在做什么。该文件是 40MB,因为我使用示例数据库将整个 cms 添加到它,包括我们的模块。该模块名为 GridViewTest 你可以在这里找到源代码:http://www.obec.nl/download/Orchard-DevExpress.zip。

4

1 回答 1

2

我终于找到了解决办法。结果证明是一个非常简单的(像往常一样),我想在这里分享它,以防其他人想将 DevExpress 与 Orchard 一起使用:

在您的 Orchard 模块中,您必须创建一个 Routes.cs 文件(在模块的根目录中)。在那里你必须添加这个:

using System.Collections.Generic;
using System.Web.Mvc;
using System.Web.Routing;
using Orchard.Mvc.Routes;

namespace CentralStationDataView
{
    public class Routes : IRouteProvider
    {
        public void GetRoutes(ICollection<RouteDescriptor> routes)
        {
            foreach (var routeDescriptor in this.GetRoutes())
            {
                routes.Add(routeDescriptor);
            }
        }

        public IEnumerable<RouteDescriptor> GetRoutes()
        {
            return new[] 
            {
                new RouteDescriptor 
                {
                    Priority = 5,
                    Route = new Route(
                        "AreaName",
                        new RouteValueDictionary
                        {
                            { "area", "AreaName" },
                            { "controller", "ControllerName" },
                            { "action", "ActionName" }
                        },
                        new RouteValueDictionary(),
                        new RouteValueDictionary 
                        {
                            { "area", "AreaName" }
                        },
                        new MvcRouteHandler())
                }
            };
        }
    }
}

您可以根据自己的喜好制作 AreaName,(据我所知)您如何称呼它并不重要。确保不要将“Controller”后缀添加到 ControllerName。然后,在您的 GridView 设置中,您必须添加以下内容: settings.CallbackRouteValues = new { area = "AreaName", Controller = "ControllerName", Action = "ViewDataPartial" }; 这些值都必须与 Routes.cs 文件中的值完全相同。“区域”属性对我来说很重要,我已经有了 Routes.cs 文件和所有内容,但我没有将区域属性添加到 CallbackRouteValues。

解决方案的第二部分是您必须仅使用其中的 GridView 来制作部分视图,并且我只强调其中的 GridView。所以没有脚本,没有额外的 html 元素,没有文本,什么都没有。

于 2012-06-19T14:47:45.837 回答