我正在尝试定义一个自定义Kendo网格工具栏命令,使用Kendo Route()MVC帮助器,如
@(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.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"))
生成正确的网址。
我的路线定义如下:
routes.MapRoute(
name: "DataImportData",
url: "{controller}/{tableType}/{id}/Import",
defaults: new { controller = "Data", action = "ImportData" },
namespaces: new[] { "MyApp.MyNamespace" }
);
这是剑道的一个已知问题,还是我做错了什么?
答案 0 :(得分: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"))
并且路线与预期的网址正确匹配。