Asp.net mvc MVC中带条件自定义命令按钮的剑道UI网格

Asp.net mvc MVC中带条件自定义命令按钮的剑道UI网格,asp.net-mvc,button,command,kendo-ui,kendo-grid,Asp.net Mvc,Button,Command,Kendo Ui,Kendo Grid,我有一个KendoUI网格,我正在使用一个MVC web应用程序,一切正常,但是我想添加一个自定义命令按钮,该按钮在UI中有条件地显示,并在我的控制器上简单地执行一个命令,将所需参数传递给它 columns.Command(command => command.Custom("UnlockAccount").SendDataKeys(true).Click()) 该命令如上所述指定,但我只希望在DataItems IsLocked属性为true时显示该按钮 我也不知道如何在控制器上调用和

我有一个KendoUI网格,我正在使用一个MVC web应用程序,一切正常,但是我想添加一个自定义命令按钮,该按钮在UI中有条件地显示,并在我的控制器上简单地执行一个命令,将所需参数传递给它

columns.Command(command => command.Custom("UnlockAccount").SendDataKeys(true).Click())
该命令如上所述指定,但我只希望在DataItems IsLocked属性为true时显示该按钮


我也不知道如何在控制器上调用和方法。我在剑道网站上找不到这方面的演示,也不知道如何推进这一点。

改用模板栏-通过ClientTemplate方法


论坛上多次介绍了条件模板-命令列没有那么灵活。

下面是一个将客户端模板用于条件命令按钮的具体示例

const string ShowUpdateButton = "#if (IsNetReversal == false) {#<a class='k-button k-button-icontext k-grid-edit' href='\\#'><span class='k-icon k-edit'></span>Update</a>#}#";
const string ShowReverseButton = "#if (IsNetReversal == false) {#<a class='k-button k-button-icontext k-grid-reverse' href='/JournalDetail/Reverse/#: ID #'  ><span class='k-icon k-reverse'></span>Reverse</a>#}#";
const string ShowDeleteButton = "#if (IsAdjustment == true) {#<a class='k-button k-button-icontext k-grid-delete' href='\\#'><span class='k-icon k-delete'></span>Delete</a>#}#";
好处是它可以与弹出编辑器一起工作,而jquery黑客在用户取消编辑时会忽略条件状态。弹出编辑器中的取消将从viewmodel或Kendo存储网格行的任何位置恢复网格行,这将导致任何jquery/javascript攻击之前的按钮状态。上面的方法还将自动连接标准命令,因为我为客户机模板复制了它们的HTML输出

缺点是,如果剑道改变了命令按钮的模式,客户端模板可能会失败。除此之外,我还厌倦了其他几种方法,这种方法的缺点似乎比其他方法好


关于剑道论坛的注意事项:截至本帖发布之日,他们似乎不允许不支付支持费用的人发布到论坛,因此我建议在这里发布问题。他们监视堆栈溢出,根据我的经验,他们在这里回答问题似乎更快。

您可以通过Visible属性控制自定义命令按钮的可见性

columns.Command(command => command.Custom("UnlockAccount").SendDataKeys(true).Click().Visible("unlockAccountVisible"))
Visible属性接受JS函数名并将当前数据项作为参数传递。 评估按钮可见性的JS函数:

<script>
  function unlockAccountVisible(dataItem) {
  // show the UnlockAccount button only when data item property IsLocked == true
  return dataItem.IsLocked;
  }
</script>

函数unlockAccountVisible(数据项){
//仅当数据项属性IsLocked==true时显示UnlockAccount按钮
返回dataItem.IsLocked;
}

阅读更多关于剑道ui文档的文章。

自2018年12月剑道发布以来,您现在可以更轻松地有条件地显示自定义按钮,但它仍然依赖JavaScript来完成其工作,应该在dataGrid之前定义此函数,否则您将遇到问题

function showCommand(dataItem) {
        console.log("determining to hide or show" + dataItem);
        // show the Edit button for the item with Status='New'
        if (dataItem.Status == 'New') {
            return true;
        }
        else {
            return false;
        }       
}
然后是网格的代码

.Columns (columns => {
columns.Command (
        command => command.Custom ("Approve")
        .Visible ("showCommand")
        .Click ("approveFunc")
    )
    .Width (100)
    .HeaderTemplate ("Actions")
})

假设人们使用更高版本的剑道工具集,这绝对是最简单的解决方案。
.Columns (columns => {
columns.Command (
        command => command.Custom ("Approve")
        .Visible ("showCommand")
        .Click ("approveFunc")
    )
    .Width (100)
    .HeaderTemplate ("Actions")
})