Asp.net mvc telerik网格在行选择如何获取id?
您好,我是asp.net mvc和telerik控件的新手。单击行时如何获取o.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))
<%= 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
}