asp.net-mvc-4 - 如何从 Kendo.Grid 的 ClientTemplate 内部向 JavaScript 函数发送参数?
问题描述
我的视图有一个 Kendo Grid,其中一个 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#");
上面的代码调用了 JavaScript 函数showDetails
此函数与 Kendo Grid 在同一视图中定义:
function showDetails(e) {
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.Action("Index", "VarianceTicketDetail", new System.Web.Routing.RouteValueDictionary(new { id = "data" }), Request.Url.Scheme)".replace("data", item.TicketId);
var newURL = ticketDetailsUrl;
window.open(newURL, '_blank');
}
现在,我需要将该函数移动到一个公共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 作为参数,并更新您的 ClientTemplate 以使用 @Url.Action 传递该参数。像这样:
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("<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#");
我已将 ClientTemplate 更改为以下逻辑:
.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) + ")'><span class='k-icon k-i-file-txt'></span></button>#=data.TicketId#");
我将替换函数data
内部的部分showDetails
推荐阅读
- twitter - 配置单元表查看使用水槽流式传输的 avro 记录,块大小对于此实现无效或太大:-40
- python - scipy.optimize.fmin 错误:使用序列设置数组元素
- linux - 在 TeamCity Linux 代理上构建 F# Xamarin 项目:无法导入 Xamarin\Android\Xamarin.Android.FSharp.targets
- pipe - 如何通过管道将 yes 传递给 Dockerfile 中的 ./script 以安装 virtualbox
- mongodb - 在 ObjectId 字段上的两个集合之间进行 $lookup 查询
- python - 比较两个 csv 文件后,如何在特定列中打印不同的行。使用 python 或 Bash
- xpath - Google 电子表格 XPATH:无法提取没有数据/值的元素
- ffmpeg - ffmpeg 配置复杂过滤器时出错
- powerbi - 火狐上的 PowerBI api powerbi.js 错误
- django - 如何从数据库实现击键实时更新?