2012-06-15 2 views
1

웹 사이트에 오차드를 사용하고 싶습니다. 우리는 해당 CMS에 대한 맞춤 모듈/위젯을 만들고이 모듈에서 DevExpress의 GridView를 사용하여 데이터를 표시하려고합니다. 대부분의 작업이 가능하지만 콜백을 사용할 수 없습니다. 이를 통해 페이지 탐색, 행 정렬 및 열 이동과 같은 것을 의미합니다.오차드 모듈의 DevExpress MVCxGridView - 콜백이 작동하지 않습니다.

콘솔을 보면 javascript와 ajax 콜백이 실행되지 않는다는 것을 알 수 있습니다. 그렇다면 이유를 알 수 없습니다. DevExpress 사이트 및 Orchard와 함께 DevExpress를 사용하는 방법에 대한 몇 가지 주제를 찾았지만 그 중 유용한 것을 찾을 수 없었습니다. 우리는 또한 컨트롤러의 메소드가 호출되지 않았지만 이유를 파악할 수 없다는 사실을 알아 냈습니다.

가끔 jQuery가 DevExpress 컨트롤에 문제를 일으킬 수 있다는 것을 알았 기 때문에 모든 jQuery 스크립트를 제거하려고 시도했지만 차이가 없습니다. 누군가도 te gridview 주위에 콜백 패널을 배치 할 것을 제안했지만, 그 중 하나는 작동하지 않았습니다. 나는 더 많은 것들을 시도했다. (나는 이미 그것을 잊어 버렸다.) 그러나 지금까지 아무 일도하지 않았다.

DevExpress website 끝 부분에서도 Orchard forums과 같은 질문을했지만 그곳에서 어떤 대답도 얻지 못해서 여기에서 내 운을 시험해 볼 것이라고 생각했습니다.

나는 당신이하고 싶은 것을보고 싶을 때를 대비 한 예제 프로젝트를 만들었습니다. 이 파일은 모듈을 포함하여 전체 cms를 예제 daabase에 추가했기 때문에 40MB입니다. GridViewTest라는 모듈이 있습니다. 소스는 http : //www.obec.nl/download/Orchard-DevExpress.zip에서 찾을 수 있습니다.

답변

2

나는 결국 해결책을 찾았습니다. 꽤 평범한 것으로 밝혀졌으며 다른 사람들이 Devchpress with 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 파일의 값과 정확히 동일해야합니다. "area"속성은 나에게 중요했다. 나는 이미 Routes.cs 파일과 모든 것을 가지고 있었지만, CallbackRouteValues에 area 속성을 추가하지 않았다.

솔루션의 두 번째 부분은 내부 뷰 GridView만을 사용하여 부분 뷰를 작성해야한다는 것입니다. 그래서 스크립트, 여분의 HTML 요소, 텍스트, 아무것도.

관련 문제