0

我正在尝试使用 Kendo Route() MVC 帮助器定义自定义 Kendo 网格工具栏命令,如

@(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" }
            );

这是剑道的一个已知问题还是我做错了什么?

4

1 回答 1

0

事实证明,问题在于该操作被指定为默认值而不是参数。如果我在 Kendo Route() 方法的路线数据中包含该操作,则路线已正确匹配。

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

我还发现,至少在这种情况下,我可以简单地使用 Action 方法并直接指定操作(“ImportData”),如

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

并且路由与预期的 URL 正确匹配。

于 2013-10-15T15:34:26.483 回答