1

我正在尝试让条件客户端模板在 Kendo Grid 中工作,该模板将使用简单的 userName 字符串作为参数调用我的控制器,但我无法弄清楚使其正常工作的语法。

我的模板在我看来是这样的:

        columns.Bound(user => user.IsLockedOut).ClientTemplate(
                "# if (IsLockedOut == true) { #" +

                    "<input type='button' value='Unlock Acc' onclick='location.href=" + @Url.Action("UnlockAccount", "Administration", new { userName = "#= UserName #" + }) + "/>" +

                "# } else { #" +
                    "Unlocked" +
                "# } #"
            );

控制器的动作方法如下:

    public void UnlockAccount(string userName)
    {
    }

目前产生的错误是:

CS1525:无效的表达式术语“}”

我已经看了几个小时了,现在我看不到树木的树林。

4

3 回答 3

1

您有一些实际上不需要的“+”加号。此外,您不需要在助手前面的“at”符号@。

 new { userName = "#= UserName #" + }) //<- that last plus
于 2013-02-19T19:40:56.457 回答
1

这种方法对我有用。

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>#}#";

您可以内联模板,但如果您声明常量然后使用 string.format 连接它们,我发现它更容易(特别是对于多个按钮)。

col.Template(o => o).ClientTemplate(string.Format("{0}{1}{2}", ShowUpdateButton, ShowDeleteButton, ShowReverseButton));

好处是它将与弹出编辑器一起使用,而当用户取消编辑时,jquery hacks 将忽略条件状态。弹出编辑器中的取消将从视图模型或 Kendo 存储它的任何位置恢复网格行,这会导致任何 jquery/javascript hack 之前的按钮状态。上面的方法也将自动连接标准命令,因为我为客户端模板复制了它们的 HTML 输出。

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

关于剑道论坛的注意事项:截至本文发布之日,他们似乎不允许不支付支持费用的人在论坛上发帖,所以我建议在这里发布问题。他们监控 Stack Overflow,根据我的经验,他们似乎在这里更快地回答问题。

于 2014-01-09T22:05:01.990 回答
0

我需要更进一步,但只能通过手动编写这样的 URL:

"<input type='button' value='Unlock Acc' onclick='location.href=/Administration/TryUnlockAccount?userName=#= UserName #'/>"

虽然仍然没有调用我的控制器方法,但它确实具有正确的参数值......

于 2013-02-20T10:34:30.397 回答