Orchard模块中的DevExpress MVCxGridView - 回调不起作用

时间:2012-06-15 09:09:59

标签: c# asp.net-mvc devexpress orchardcms

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

如果我们查看控制台,我们可以看到javascript和ajax回调永远不会被执行,我们无法弄清楚为什么会这样。我在DevExpress网站和本网站上发现了一些关于在Orchard中使用DevExpress的主题,但我找不到任何有用的(对于我的情况)。我们还注意到我们的控制器的方法从未被调用过,但是无法弄清楚为什么不这样做。

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

我也在DevExpress website结束Orchard forums问了同样的问题,但我没有得到任何答案,所以我想我会在这里试试运气。

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

1 个答案:

答案 0 :(得分:2)

我终于找到了解决方案。事实证明这是一个非常简单的(像往常一样),我想在这里分享,以防其他人想在Orchard使用DevExpress:

在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文件中的值完全相同。 “area”属性对我来说至关重要,我已经拥有了Routes.cs文件和所有内容,但我没有将area属性添加到CallbackRouteValues。

解决方案的第二部分是你只需要制作一个局部视图,我只需要在其中强调GridView。所以没有脚本,没有额外的html元素,没有文本,没有。