Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在剑道上下文菜单中获取当前行?_Javascript_C#_.net_Kendo Ui_Kendo Asp.net Mvc - Fatal编程技术网

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.
    }