Javascript 剑道UI模板:模板错误无效

Javascript 剑道UI模板:模板错误无效,javascript,asp.net-mvc,razor,kendo-ui,Javascript,Asp.net Mvc,Razor,Kendo Ui,我正在尝试制作剑道UI网格模板。当我运行以下Chrome时,会显示错误消息。我省略了消息的大部分其余部分,因为它只是将生成的所有HTML和javascript打印到控制台 Uncaught错误:无效模板:“我昨天遇到了这个问题,所以我找到了一个解决方案,不需要您删除编码器 using System.Web; using System.Web.Mvc; using System.Web.Security.AntiXss; using System.Web.Util; namespace Your

我正在尝试制作剑道UI网格模板。当我运行以下Chrome时,会显示错误消息。我省略了消息的大部分其余部分,因为它只是将生成的所有HTML和javascript打印到控制台


Uncaught错误:无效模板:“我昨天遇到了这个问题,所以我找到了一个解决方案,不需要您删除编码器

using System.Web;
using System.Web.Mvc;
using System.Web.Security.AntiXss;
using System.Web.Util;

namespace Your.Namespace.Here
{
    public static class KendoMvcExtensions
    {

        public static IHtmlString ToMvcClientTemplate(this MvcHtmlString mvcString)
        {
            if (HttpEncoder.Current.GetType() == typeof (AntiXssEncoder))
            {
                var initial = mvcString.ToHtmlString();
                var corrected = initial.Replace("\\u0026", "&").Replace("%23", "#").Replace("%3D", "=").Replace(" ", " ");
                return new HtmlString(corrected);
            }

            return mvcString;
        }
    }
}
它检查
反xssencoder
是否处于活动状态,如果处于活动状态,则会删除有问题的编码字符。如果需要,您可以执行编码器检查,但不要更改字符的替换顺序。。。它的结构是这样的,因为.NET将使一些字符(特别是验证器文本)具有混合编码(UTF-8和Unicode在同一个字符集中,例如:
\u0026#32
,未编码的一次变为
 
,未编码的两次变为

要使用它,只需在任何有问题的控件声明末尾调用
.ToMvcClientTemplate()
。在OP的情况下,在关闭div之前,应该将其放在右括号之后

以防其他人发布更好的解决方案,因为我已经在几个地方发布了这段代码


HTH

对于任何有类似问题的人,我这样解决:

我已经在Web.config中删除了这一行

<httpRuntime targetFramework="4.5" encoderType="System.Web.Security.AntiXss.AntiXssEncoder, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />.

我以前使用javascript函数清理我的MVC部分,我还为\添加了一个删除程序,因为我发现MVC版本中添加了许多

    function fixTemplate(template) {
    template = template.replace(/\\u0026/g, "&");
    template = template.replace(/%23/g, "#");
    template = template.replace(/%3D/g, "=");
    template = template.replace(/&#32/g, " ");
    template = template.replace(/\\/g, "");
    return template;
}

我不知道是否有更有效的方法,所以请随意评论。

最有趣的是,如果您共享整个无效模板,它将非常有用:)通常会有#符号打破夯实。共享它,以便我们可以查看代码部分中的无效模板。它是ID为“GridDetailsTemplate”的那个。我指的是错误消息。它包含“真实”模板:)哦,我明白你的意思了。我已经添加了那个代码。当然是缩小了,所以我用一些在线工具缩小了。你能检查一下问题是否与[这里][1]的问题不同吗?[1]:
<httpRuntime targetFramework="4.5" encoderType="System.Web.Security.AntiXss.AntiXssEncoder, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />.
    function fixTemplate(template) {
    template = template.replace(/\\u0026/g, "&");
    template = template.replace(/%23/g, "#");
    template = template.replace(/%3D/g, "=");
    template = template.replace(/&#32/g, " ");
    template = template.replace(/\\/g, "");
    return template;
}