Model view controller 有没有办法在Telerik MVC网格中有条件地显示命令按钮?

Model view controller 有没有办法在Telerik MVC网格中有条件地显示命令按钮?,model-view-controller,button,telerik,command,Model View Controller,Button,Telerik,Command,我的网格中有一列为命令保留,如下所示: .Columns(c => { c.Command(cmd => { cmd.Edit().ButtonType(GridButtonType.Image); cmd.Delete().ButtonType(GridButtonType.Image); }); ... } 是否有方法根据

我的网格中有一列为命令保留,如下所示:

.Columns(c =>
{
   c.Command(cmd =>
                  {
                    cmd.Edit().ButtonType(GridButtonType.Image);
                    cmd.Delete().ButtonType(GridButtonType.Image);
                  });
...
}
是否有方法根据当前行中字段的值有条件地显示“删除”按钮?我想这样做:

cmd.Delete().ButtonType(GridButtonType.Image)
         .HtmlAttributes((item.HasChildren == true ? new { style = "display: none"} : null));
问题是该项不在此处的范围内,因为它位于模板列中


谢谢。

最好使用网格的OnRowDataBound客户端事件来处理这个问题。以下JavaScript应该可以工作:

function onRowDataBound(e) {
    if (e.dataItem.HasChildren) {
        $(e.row).find('t-grid-delete').remove();
    }
}

e变量可用于访问任何字段(因此可以检查HasChildren是否为真),然后只需查看特定行($(e.row))并找到表示删除按钮(t-grid-Delete)的元素即可。

上述答案仅适用于Ajax绑定。如果在实例化期间将集合传递到网格中,那么还必须在OnLoad事件中执行类似的操作(因为行实际上不是数据绑定的)

@(Html.Telerik().Grid(Model.org)
.Name(“借用人PopupGrid”)
.Columns(cols=>
{
cols.Bound(b=>b.FirstName);
cols.Bound(b=>b.MiddleName);
cols.Bound(b=>b.LastName);
cols.Bound(b=>b.MailingAddress).Title(“地址”);
cols.Bound(b=>b.MailingCity).Title(“城市”);
cols.Bound(b=>b.MailingState.StateCode).Title(“State”).ClientTemplate(“”);
cols.Bound(b=>b.MailingZipCode;
cols.Bound(b=>b.TelephoneNumberFirst).Title(“电话1”);
cols.Bound(b=>b.TelephoneNumberSecond).Title(“电话2”);
cols.Bound(b=>b.EmailAddress).Title(“电子邮件”);
cols.Command(Command=>
{
command.Edit();
command.Delete();
});
})
.客户事件(事件=>
{
events.OnLoad(“借用者PopupGridOnLoad”);
events.OnRowDataBound(“借用者PopupGridOnRowDatabound”);
})
)
函数借用器PopupGridOnRowDataBound(e){
如果(e.dataItem.BorrowerId==BorrowereId | | e.dataItem.BorrowerId==borrowerTwoId){
$(e.row).find('.t-grid-delete').remove();
}
} 
函数借用器PopupGridOnLoad(e){
var grid=$('#借用者PopupGrid')。数据('tGrid');
grid.$rows().each(函数(索引,行){
var dataItem=grid.dataItem(行);
如果(dataItem.BorrowerId==BorrowereId | | dataItem.BorrowerId==borrowerTwoId){
row.find('.t-grid-delete').remove();
}
});
}

看起来像类选择器,在这种情况下应该是“.t-grid-delete”howcheng-我在OnLoad事件中尝试了您的代码,但是grid.dataItem(行)返回未定义的。在我最初编写本文的五个月内,我的jQuery变得更好了,所以我更新了代码示例,使其更加优雅。empo,我不知道您在做什么,但是如果您的网格中有数据,这真的应该起作用。如果您仍然有问题,请发布代码。我必须切换到Ajax绑定f或者其他原因,但是像你这样迭代每一行对我来说是有意义的。谢谢你更新它。当然它会帮助别人。
@(Html.Telerik().Grid<Borrower>(Model.Borrowers)
    .Name("BorrowersPopupGrid")
    .Columns(cols =>
    {
        cols.Bound(b => b.FirstName);
        cols.Bound(b => b.MiddleName);
        cols.Bound(b => b.LastName);
        cols.Bound(b => b.MailingAddress).Title("Address");
        cols.Bound(b => b.MailingCity).Title("City");
        cols.Bound(b => b.MailingState.StateCode).Title("State").ClientTemplate("<#= MailingState == null ? '' : MailingState.StateCode#>");
        cols.Bound(b => b.MailingZipCode;
        cols.Bound(b => b.TelephoneNumberFirst).Title("Phone 1");
        cols.Bound(b => b.TelephoneNumberSecond).Title("Phone 2");
        cols.Bound(b => b.EmailAddress).Title("Email");
        cols.Command(command =>
            {
                command.Edit();
                command.Delete();
            });
    })
    .ClientEvents(events =>
    {
        events.OnLoad("BorrowersPopupGridOnLoad");
        events.OnRowDataBound("BorrowersPopupGridOnRowDataBound");
    })
)

function BorrowersPopupGridOnRowDataBound(e) {
    if (e.dataItem.BorrowerId == borrowerOneId || e.dataItem.BorrowerId == borrowerTwoId) {
        $(e.row).find('.t-grid-delete').remove();
    }
} 
function BorrowersPopupGridOnLoad(e) {
    var grid = $('#BorrowersPopupGrid').data('tGrid');
    grid.$rows().each(function(index, row) {
        var dataItem = grid.dataItem(row);
        if (dataItem.BorrowerId == borrowerOneId || dataItem.BorrowerId == borrowerTwoId) {
            row.find('.t-grid-delete').remove();
        }
    });
}