如何将razor变量添加到kendo网格中的列模板中,以用于if else逻辑

时间:2017-07-07 14:19:25

标签: asp.net-mvc razor kendo-grid

我正在尝试使用带有Razor语法的kendo网格,并使用if:else逻辑来构建标头模板。我遇到的问题是if语句不检查kendo网格的模型属性,而是检查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;

    }

现在,奇怪的是,如果一个对象具有所有数字的控制号,它可以正常工作。如果控制号是数字然后是alpha,则尝试仅调用查看证书的函数失败。

开发人员工具中的错误来自:

GetCertHistory(1210000bbbtest123)   "Invalid or unexpected token"

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

1 个答案:

答案 0 :(得分:1)

我会将你这样做的方式更改为这样的外部模板:

$( document ).ready(function() {
$('.remove_nested_fields').click(function(remLine){
    var cnt = document.getElementById('acd').innerHTML;
    cnt = parseInt(cnt,10)
    var res = cnt + 1;
    $('#acd').html(res);
});
});

然后有一个javascript函数,为你获取这样的链接(未经测试,但应该工作):

.ClientTemplate("#=getLinks(data)#")

或者您可以使用外部模板来处理这些链接,这可能是未来可维护的解决方案,但这应该对您有用。

任何问题都让我知道,我会为您更新答案