Asp.net mvc telerik网格在行选择如何获取id?

Asp.net mvc telerik网格在行选择如何获取id?,asp.net-mvc,telerik-grid,Asp.net Mvc,Telerik Grid,您好,我是asp.net mvc和telerik控件的新手。单击行时如何获取o.Id值 <%= Html.Telerik().Grid(Model) .Name("RolesGrid") .DataKeys(keys => keys.Add(o => o.Id))

您好,我是asp.net mvc和telerik控件的新手。单击行时如何获取o.Id值

 <%= Html.Telerik().Grid(Model)                    
                    .Name("RolesGrid")
                    .DataKeys(keys => keys.Add(o => o.Id))                               
                    .Selectable()                    
                    .Columns(columns =>
                    {
                        columns.Bound(o => o.Name);
                        columns.Bound(o => o.Description);

                    })
                    .Pageable()                       
                    .ClientEvents(events => events                    
                    .OnRowSelect("onRowSelect"))

             %>

但dataItem为null,并且生成的html文件中没有id值。感谢并抱歉我的英语不好

将onrow选择的功能更改为:

function onRowSelect(sender, args){...}
发送方将是网格,您可以从参数中确定选择了哪个项目

有关如何使用客户端API获取数据的详细信息,请访问Telerik帮助网站:

来自

您必须将Id作为隐藏列放入telerik网格中

// ...
.DataKeys(keys => keys.Add(o => o.Id))                               
.Selectable()
.Columns(columns =>
    {
        columns.Bound(o => o.Id).Hidden();
        columns.Bound(o => o.Name);
        columns.Bound(o => o.Description);
    })
// ...
.ClientEvents(events => events.OnRowSelect("onRowSelect"))
这将带来一场灾难

<td style="display: none; ...">...</td>
注:

我知道,这很难看。 我不知道为什么电传机强迫你呼叫数据键。。。方法,如果没有文档化的方法来获取定义的键的值。 如果使用分组或其他功能,则会变得更加棘手,因为隐藏列的位置会根据分组的排列而变化。
因此,毕竟我有最好的方法获得身份证是:

将onRowSelect函数绑定到网格 在onRowSelect中编写下一个代码

var dataItem = jQuery('#MyGridId').data('tGrid').dataItem(e.row);     
alert(dataItem['Id']);
dataItem是一个映射,它具有网格模型的所有属性,所以您可以得到所需的一切


仅此而已,谢谢

我找到了一种借用mmutilva答案的更优雅的方法

首先,以相同的方式放入隐藏列和更改事件:

.DataKeys(keys => keys.Add(o => o.Id))                               
.Selectable()
.Columns(columns =>
    {
        columns.Bound(o => o.Id).Hidden();
        columns.Bound(o => o.Name);
        columns.Bound(o => o.Description);
    })
.ClientEvents(events => events.OnRowSelect("onRowSelect"))
但是在javascript函数中,有一种更好的方法可以实际选择对象,然后选择隐藏行:

    function onRowSelect(e)   {
        var grid = e.sender;
        var currentitem = grid.dataItem(this.select());
        var Id = currentitem.Id;
        //then do whatever with the ID variable
    }

当我尝试显示警报参数时;它的调用未定义值,在帮助中,我在RowSelectApoligies上只看到mvc网格的一个参数。。。我假设网格语法与AJAX控件相同。我要把这个给MVC专家。我确实在Telerik网站上读到了一些关于网格的信息,看起来你的onRowSelect代码是正确的。从上面的代码中,我看不到您将网格绑定到任何数据的位置。感谢您的回复,我将尝试查找绑定数据。感谢您的回复,我将在2个月前执行此操作,但使用类似的方法@Sanja:很抱歉,回答太晚了。。。当我遇到这个问题时,我正在寻找一些类似的问题。虽然asp.net的telerik控件功能强大,但有时定制更复杂的示例可能会很困难。这个例子很贴切。容易极了!我在末尾留下了隐藏id,并添加了var id=e.row.cells[e.row.cells.length-1].innerHTML;始终获取最后一项。这就解决了Grouping的问题。你能澄清Gridid和其他变量是什么吗?@Ammar Ahmed MyGridId是你的网格标识符网格名称当你声明telerik grid时,OnRowSelect函数中的e参数在问题中,网格似乎是服务器端,服务器端网格不支持dataItem。这是我从Telerik技术支持中读到的。。。get_gridDataItem在客户端上不直接可用,除非已连接OnRowCreating/OnRowCreated事件。这样做是为了优化目的。如果需要行索引,可以使用eventArgs.get\u itemIndexHierarchical
.DataKeys(keys => keys.Add(o => o.Id))                               
.Selectable()
.Columns(columns =>
    {
        columns.Bound(o => o.Id).Hidden();
        columns.Bound(o => o.Name);
        columns.Bound(o => o.Description);
    })
.ClientEvents(events => events.OnRowSelect("onRowSelect"))
    function onRowSelect(e)   {
        var grid = e.sender;
        var currentitem = grid.dataItem(this.select());
        var Id = currentitem.Id;
        //then do whatever with the ID variable
    }