Javascript 如何在剑道上下文菜单中获取当前行?
我有一个剑道格网的剑道上下文菜单。我想提取当前行的值。 我的看法是:Javascript 如何在剑道上下文菜单中获取当前行?,javascript,c#,.net,kendo-ui,kendo-asp.net-mvc,Javascript,C#,.net,Kendo Ui,Kendo Asp.net Mvc,我有一个剑道格网的剑道上下文菜单。我想提取当前行的值。 我的看法是: @(Html.Kendo().Grid<Class>() .Name("reqRows") .Columns(columns => { columns.Bound(x => x.0); }) ) @(Html.Kendo().ContextMenu() .Name("brc") .Target("#reqRows") .Items
@(Html.Kendo().Grid<Class>()
.Name("reqRows")
.Columns(columns =>
{
columns.Bound(x => x.0);
})
)
@(Html.Kendo().ContextMenu()
.Name("brc")
.Target("#reqRows")
.Items(items =>
{
items.Add()
.Text("1").LinkHtmlAttributes(new { onClick = "confirm()" });
})
)
<script>
function confirm(e) {
alert(e);
var dataItem = this.dataItem($(e.currentTarget).closest("tr"));
alert(dataItem.0);
}
</script>
@(Html.Kendo().Grid())
.Name(“reqRows”)
.列(列=>
{
columns.Bound(x=>x.0);
})
)
@(Html.Kendo().ContextMenu())
.名称(“brc”)
.目标(“需求行”)
.项目(项目=>
{
items.Add()
.Text(“1”).linkHtmlatAttributes(新的{onClick=“confirm()”});
})
)
功能确认(e){
警报(e);
var dataItem=this.dataItem($(e.currentTarget).closest(“tr”);
警报(dataItem.0);
}
我得到
e
的未定义的值。如何提取当前行?我是否可以提取未绑定在列中的Model.Id
@(Html.Kendo().ContextMenu()
.Name("brc")
.Target("#reqRows")
.Items(items =>
{
items.Add().Text("1");
})
.Events(e => e.Select("selectItem"))
)
然后按如下方式获取所选项目:
function selectItem(e) {
var grid = $(e.target).data("kendoGrid");
var item = grid.dataItem(grid.select());
var data = item.SomeColumn;
}
如果使用鼠标右键打开关联菜单,默认情况下它不会选择该行,项
将是未定义的
。添加此javascript以确保选中该行(请注意,您的网格需要是.selective()
):
如果需要ID,则需要将其绑定到网格。把它藏起来:
@(Html.Kendo().Grid<Class>()
.Name("reqRows")
.Columns(columns =>
{
columns.Bound(x => x.Id).Hidden();
columns.Bound(x => x.SomeColumn);
})
)
@(Html.Kendo().Grid())
.Name(“reqRows”)
.列(列=>
{
columns.Bound(x=>x.Id).Hidden();
columns.Bound(x=>x.SomeColumn);
})
)
这对我很有效,不需要添加/删除k-state-selected类的代码:
function selectItem(e)
{
var item = e.sender.dataItem(e.target);
alert(item.SomeColumn);
}
上述方法仅在网格已关闭时有效。如果有,则$(e.target).data(“kendoGrid”)
为空/未定义
在本例中,我执行了以下操作:
在包含一些隐藏字段的列中定义模板:
...
columns.Bound(pg => pg.FileName)
.Title("My column")
.Template(
@<text>
@* Store information for JS in hidden row fields. *@
<input type="hidden" class="unique-id-hidden" value="@item.UniqueID" />
@* Output the visible content. *@
<div>
@item.FileName
</div>
</text>);
...
要获取触发事件的菜单项,您可以使用$(e.item)
我仍然得到网格的未定义的,并且项出现以下错误:无法获取未定义或空引用的属性“dataItem”
Hm,应该可以工作。如果您这样做会怎么样:var grid=$(“#rekrows”).data(“kendoGrid”)代码>?是的,就是这样:)你知道这个问题吗?不知道为什么它对你不起作用,至少对我有效。:)您还可以尝试var grid=$(“#”+e.target.id).data(“kendoGrid”)代码>
...
columns.Bound(pg => pg.FileName)
.Title("My column")
.Template(
@<text>
@* Store information for JS in hidden row fields. *@
<input type="hidden" class="unique-id-hidden" value="@item.UniqueID" />
@* Output the visible content. *@
<div>
@item.FileName
</div>
</text>);
...
function selectItem(e) {
var uniqueID = $(e.target).closest("tr").find('.unique-id-hidden').first().val();
// Do something with the data.
}