我正在尝试使用条件客户端模板在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:无效的表达式术语'}'
我现在已经看了几个小时了,现在我看不到树木了。
答案 0 :(得分:1)
你有一些你实际上并不需要的'+'加符号。此外,您不需要帮助者面前的'at'符号@。
new { userName = "#= UserName #" + }) //<- that last plus
答案 1 :(得分: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,根据我的经验,他们似乎在这里更快地回答问题。
答案 2 :(得分:0)
我还需要进一步,但只能通过手动编写这样的URL:
"<input type='button' value='Unlock Acc' onclick='location.href=/Administration/TryUnlockAccount?userName=#= UserName #'/>"
虽然仍然没有调用我的控制器方法,但确实有正确的参数值......