Asp.net mvc 4 如何从Kendo.Grid的ClientTemplate内部向JavaScript函数发送参数?

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是按以下方式为列定义的:

.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 error
Uncaught 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#");