Asp.net mvc 如何为if-else逻辑向剑道网格中的列模板添加razor变量

Asp.net mvc 如何为if-else逻辑向剑道网格中的列模板添加razor变量,asp.net-mvc,razor,kendo-grid,Asp.net Mvc,Razor,Kendo Grid,我正在尝试使用带有Razor语法的剑道网格,并使用if:else逻辑来构建头模板。我遇到的问题是if语句没有检查剑道网格模型的属性,而是检查c#razor的SessionHelper属性。我似乎不能正确地理解它。我目前正在使用以下工具,但它不起作用 我们使用的ClientTemplate如下所示: .ClientTemplate("#= getLinks(data)#") 功能代码如下所示: function getLinks(data) { var level2Access

我正在尝试使用带有Razor语法的剑道网格,并使用if:else逻辑来构建头模板。我遇到的问题是if语句没有检查剑道网格模型的属性,而是检查c#razor的SessionHelper属性。我似乎不能正确地理解它。我目前正在使用以下工具,但它不起作用

我们使用的ClientTemplate如下所示:

.ClientTemplate("#= getLinks(data)#")
功能代码如下所示:

function getLinks(data) {

        var level2Access = '@SessionHelper.IsUserLevel2Access()';
        var model = "<a href='javascript:GetCertsHistory(" + data.ControlNumber + ")'>Certs</a> | " +
          "<a href='javascript:GetInvoicesHistory(" + data.ControlNumber + ")'>Invoices</a> | ";

        if (level2Access) {
            model += "<a href='javascript:GetItemToEdit(" + data.ControlNumber + ")'>Edit</a>";
        }

        return model;

    }

我不知道为什么只有当参数是字母数字而不仅仅是数字时才会发生这种情况。我甚至认为可能有一个特殊的角色我没有看到,所以我运行修剪对params,但它仍然发生。您对此有何想法?

我会将您执行此操作的方式更改为类似以下内容的外部模板:

.ClientTemplate("#=getLinks(data)#")
然后有一个javascript函数,可以像这样为您获取链接(未测试,但应该可以工作):

函数getLinks(数据){ 控制台日志(数据); var level2Access='@SessionHelper.IsUserLevel2Access()'; var model=“|”+ " | "; 如果(2级访问){ 型号+=”; } 收益模型; } 或者,您可以为这些链接使用外部模板,这在将来可能是一个更易于维护的解决方案,但这应该适合您


任何问题请告诉我,我会为您更新答案

我会将您执行此操作的方式更改为类似以下内容的外部模板:

.ClientTemplate("#=getLinks(data)#")
然后有一个javascript函数,可以像这样为您获取链接(未测试,但应该可以工作):

函数getLinks(数据){ 控制台日志(数据); var level2Access='@SessionHelper.IsUserLevel2Access()'; var model=“|”+ " | "; 如果(2级访问){ 型号+=”; } 收益模型; } 或者,您可以为这些链接使用外部模板,这在将来可能是一个更易于维护的解决方案,但这应该适合您


如果有任何问题,请告诉我,我会为您更新答案

哦,是的,这是个好主意。我不知道为什么我忽略了走这条路。哈哈,谢谢!我不得不稍微修改一下你的代码。我在我的问题中更新了它,但是当在开发工具中调试时,尝试调用函数params中的正确模型值时,我现在遇到了无效的令牌错误。至少你让它工作了。让我知道你所做的编辑,我会更新我的回答。我还有一个问题。如果data.ControlNumber包含字母数字,则在尝试调用函数时会出现无效标记错误。如果它只是数字或字母,那么它可以工作。奇怪,但是你的想法让我更接近解决方案。我在值周围添加了封装引号,所以现在应该对你有用。哦,是的,这是个好主意。我不知道为什么我忽略了走这条路。哈哈,谢谢!我不得不稍微修改一下你的代码。我在我的问题中更新了它,但是当在开发工具中调试时,尝试调用函数params中的正确模型值时,我现在遇到了无效的令牌错误。至少你让它工作了。让我知道你所做的编辑,我会更新我的回答。我还有一个问题。如果data.ControlNumber包含字母数字,则在尝试调用函数时会出现无效标记错误。如果它只是数字或字母,那么它可以工作。奇怪,但是你的想法让我更接近解决方案。我在值周围添加了封装引号,所以现在应该对你有用了。
 function getLinks(data) {
        console.log(data);
        var level2Access = '@SessionHelper.IsUserLevel2Access()';
        var model = "<a href='javascript:GetCertsHistory(\"" + data.ControlNumber +"\")'>Certs</a> | " +
          "<a href='javascript:GetInvoicesHistory(\"" + data.ControlNumber + "\")'>Invoices</a> | ";

        if (level2Access) {
            model += "<a href='javascript:GetItemToEdit(\"" + data.ControlNumber + "\")'>Edit</a>";
        }

        return model;

    }