Asp.net mvc 4 如何从Kendo.Grid的ClientTemplate内部向JavaScript函数发送参数?
“我的视图”有一个剑道网格,其中ClientTemplate是按以下方式为列定义的:Asp.net mvc 4 如何从Kendo.Grid的ClientTemplate内部向JavaScript函数发送参数?,asp.net-mvc-4,model-view-controller,kendo-ui,url-action,Asp.net Mvc 4,Model View Controller,Kendo Ui,Url Action,“我的视图”有一个剑道网格,其中ClientTemplate是按以下方式为列定义的: .ClientTemplate("<button type ='button' class='k-button btn-icon-sm btn-view-detail' id='btnTicketDetail' onclick='showDetails(this)'><span class='k-icon k-i-file-txt'></span></but
.ClientTemplate("<button type ='button' class='k-button btn-icon-sm btn-view-detail' id='btnTicketDetail' onclick='showDetails(this)'><span class='k-icon k-i-file-txt'></span></button>#=data.TicketId#");
现在,我需要将该函数移动到一个公共的Site.js
文件中
当我这样做时,函数中的以下行不正确:
var ticketDetailsUrl = "@Url.Action("Index", "VarianceTicketDetail", new System.Web.Routing.RouteValueDictionary(new { id = "data" }), Request.Url.Scheme)".replace("data", item.TicketId);
这就是它看起来的样子:
基本上,如我所见,它无法构建@Url.Action
字符串
我应该如何确保它工作?您可以更改showDetails方法以接受url作为参数,并使用@url.Action更新ClientTemplate以传递该参数。像这样: ShowDetails方法:
function showDetails(e, url) {
var grid = $("#VarianceTicket").data("kendoGrid");
var row = $(e).closest("tr");
var rowIdx = $("tr", grid.tbody).index(row);
var item = grid.dataItem(row);
var ticketDetailsUrl = url;
var newURL = ticketDetailsUrl;
window.open(newURL, '_blank');
}
ClientTemplate(使用字符串连接并添加空行以提高可读性,格式可能需要调整,我现在无法在本地进行测试):
.ClientTemplate(“#=data.TicketId”);
我已将ClientTemplate更改为以下逻辑:
.ClientTemplate(“#=data.TicketId”)代码>
我将在参数列表
之后替换showDetails
函数中的data
部分Got JavaScript errorUncaught SyntaxError:missing),就像我说的格式可能需要调整一样我看到您的编辑,您提到要替换showDetails功能中的数据部分。为什么不直接将id设置为模板中的正确id?像这样:new{id=#=data.TicketId}这样做很有意义。THX如果我只是将TicketID
作为参数传递给函数,函数内部会将TicketID附加到url:showDetails(“#=data.TicketID”)
您可以这样做,但是当您在javascript函数中将id附加到url时,您将无法使用url。帮助构建该url的操作(假设您使用的是独立的js文件)
function showDetails(e, url) {
var grid = $("#VarianceTicket").data("kendoGrid");
var row = $(e).closest("tr");
var rowIdx = $("tr", grid.tbody).index(row);
var item = grid.dataItem(row);
var ticketDetailsUrl = url;
var newURL = ticketDetailsUrl;
window.open(newURL, '_blank');
}
.ClientTemplate("<button type ='button' class='k-button btn-icon-sm btn-view-detail' id='btnTicketDetail' onclick='showDetails(this, " +
Url.Action("Index", "VarianceTicketDetail", new System.Web.Routing.RouteValueDictionary(new { id = "data" }), Request.Url.Scheme)".replace("data", #=data.TicketId#) +
")'><span class='k-icon k-i-file-txt'></span></button>#=data.TicketId#");