2013-09-30 2 views
0

Я пытаюсь определить команду пользовательского Кендо панели инструментов сетки, используя Кендо Route() MVC помощник как вКендо MVC Helper «Route()» Формирует Неправильный URL

@(Html.Kendo().Grid(Model.Imports) 
.Name("ImportsGrid") 
.ToolBar(tb => tb.Custom().Route("DataImportData", new { tableType = DataTablesTypeEnum.MyTables, id = Model.TableName }).Text("Import Data")) 

Но сгенерированный URL неверен - он заканчивается тем же URL-адресом, что и страница, содержащая сетку, которая является ключом к тому, что он каким-то образом не смог найти маршрут.

Однако ... Когда я использую метод Url.RouteUrl() как так

@{ var url = Url.RouteUrl("DataImportData", new { tableType = DataTablesTypeEnum.MyTables, id = Model.TableName });} 
@(Html.Kendo().Grid(Model.Imports) 
     .Name("ImportsGrid") 
     .ToolBar(tb => tb.Custom().Url(url).Text("Import Data")) 

Правильный URL генерируется.

Мой маршрут определяется следующим образом:

  routes.MapRoute(
      name: "DataImportData", 
      url: "{controller}/{tableType}/{id}/Import", 
      defaults: new { controller = "Data", action = "ImportData" }, 
      namespaces: new[] { "MyApp.MyNamespace" } 
      ); 

Это известная проблема с кэндо или я делаю что-то не так?

ответ

0

Оказывается, проблема заключается в том, что действие задано как значение по умолчанию, а не как параметр. Если включить в данные маршрута метод Kendo Route(), маршрут будет правильно согласован.

.ToolBar(tb => tb.Custom().Route("DataImportData", new { action="ImportData", tableType = DataTableTypeEnum.MyTables, id = Model.TableName }).Text("Import Data")) 

Я также обнаружил, что, по крайней мере, в этом случае, я могу просто использовать метод действий и указать действие («ImportData») прямо как в

.ToolBar(tb => tb.Custom().Action("ImportData", "Data", new { tableType = DataTableTypeEnum.MyTables, id = Model.TableName }).Text("Import Data")) 

и маршрут правильно подобран с ожидаемым URL.