4

嗨,我是 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"))

             %>

在js代码中:

 function onRowSelect(e)   {
        var ordersGrid = $('#RolesGrid').data('tGrid');  
        var row = e.row;
        var dataItem = ordersGrid.dataItem(row);
        alert(dataItem);
    }

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

4

4 回答 4

12

所以毕竟我有最好的方式来获得 id 是:

  1. 将 onRowSelect 函数绑定到您的网格
  2. 在 onRowSelect 中编写下一个代码

    var dataItem = jQuery('#MyGridId').data('tGrid').dataItem(e.row);     
    alert(dataItem['Id']);
    

    dataItem 是一个地图女巫,拥有网格模型的所有属性,所以你得到你想要的一切

就这些,多谢

于 2011-06-17T07:53:56.863 回答
10

From telerik grid demo.

You have to put the Id in the telerik grid as a hidden column.

// ...
.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"))

It will render a

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

And then you get it like this:

function onRowSelect(e)   {
    var id = e.row.cells[0].innerHTML;
    // ...
}

Notes:

  • I know, it's ugly.
  • I don't know why the telerik forces you to call the .DataKeys(...) method if there's no documented way to get the value for the key defined.
  • If you use grouping or some other feature it gets trickier, as the hidden column position varies depending on the grouping arrangement.
于 2011-02-09T15:20:40.640 回答
1

我找到了一种更优雅的方式来做到这一点,它借鉴了 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
    }

资源

于 2015-06-24T15:48:14.620 回答
0

将 onRowSelect 函数更改为:

function onRowSelect(sender, args){...}

发件人将是网格,您可以从 args 确定选择了哪个项目。

查看 Telerik 帮助站点以获取有关如何使用客户端 API 获取数据的详细信息: http ://www.telerik.com/help

于 2010-12-10T13:03:13.450 回答