Javascript 剑道UI模板:模板错误无效
我正在尝试制作剑道UI网格模板。当我运行以下Chrome时,会显示错误消息。我省略了消息的大部分其余部分,因为它只是将生成的所有HTML和javascript打印到控制台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
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(/ /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(/ /g, " ");
template = template.replace(/\\/g, "");
return template;
}