Sitefinity 页面小部件在呈现时删除 HTML
Sitefinity Page Widget Removing HTML When Rendered
我正在为 Sitefinity 创建一个页面小部件,使用 Vue 来显示一些工作。问题是当页面在前端呈现时,Vue 用来显示结果的 html 被删除了。所以这是我的 jobs.ascx 文件中的原始 html 和 vue js 代码:
<div class="col-md-4">
<ul class="latestjobs">
<li v-for="job in jobs">{{jobname}}<br /><em>{{companyname}}</em></li>
</ul>
</div>
var app = new Vue({
el: ".latestjobs",
data: {
jobs: [
{ "jobname": "Test", "companyname": "Test" }
]
}
});
这是页面上呈现的内容:
<div class="col-md-4">
<!---->
</div>
我似乎找不到任何关于为什么会发生这种情况的参考资料,所以如果您能帮助解决这个问题,我们将不胜感激。
你用 MVC widget/templates (Feather) 测试过吗?可能是 rending engine 逃脱了?此外,如果您删除(评论)vuejs 脚本,小部件是否呈现 html?
解决方案是创建一个新的 HtmlSanitizer class,其中包含您要允许的标签。这是我用于 class:
使用Telerik.Sitefinity.Security.Sanitizers;
namespace SitefinityWebApp.Infrastructure.Classes
{
public class SitefinityExtendedHtmlSanitizer : HtmlSanitizer
{
public SitefinityExtendedHtmlSanitizer()
{
base.AllowedTags.Add("iframe");
base.AllowedAttributes.Add("id");
base.AllowedAttributes.Add("v-for");
}
}
}
然后我不得不在 global.asax 中注册它。这是代码:
protected void Application_Start(object sender, EventArgs e)
{
ObjectFactory.Initialized += RegisterCommonTypesEventHandler;
}
private void RegisterCommonTypesEventHandler(object sender, ExecutedEventArgs e)
{
if (e.CommandName == "RegisterCommonTypes")
{
ObjectFactory.Container.RegisterType<IHtmlSanitizer, SitefinityExtendedHtmlSanitizer>(new ContainerControlledLifetimeManager());
}
}
这一切都与 Sitefinity 10.2 有关。
韦德
我正在为 Sitefinity 创建一个页面小部件,使用 Vue 来显示一些工作。问题是当页面在前端呈现时,Vue 用来显示结果的 html 被删除了。所以这是我的 jobs.ascx 文件中的原始 html 和 vue js 代码:
<div class="col-md-4">
<ul class="latestjobs">
<li v-for="job in jobs">{{jobname}}<br /><em>{{companyname}}</em></li>
</ul>
</div>
var app = new Vue({
el: ".latestjobs",
data: {
jobs: [
{ "jobname": "Test", "companyname": "Test" }
]
}
});
这是页面上呈现的内容:
<div class="col-md-4">
<!---->
</div>
我似乎找不到任何关于为什么会发生这种情况的参考资料,所以如果您能帮助解决这个问题,我们将不胜感激。
你用 MVC widget/templates (Feather) 测试过吗?可能是 rending engine 逃脱了?此外,如果您删除(评论)vuejs 脚本,小部件是否呈现 html?
解决方案是创建一个新的 HtmlSanitizer class,其中包含您要允许的标签。这是我用于 class:
使用Telerik.Sitefinity.Security.Sanitizers;
namespace SitefinityWebApp.Infrastructure.Classes
{
public class SitefinityExtendedHtmlSanitizer : HtmlSanitizer
{
public SitefinityExtendedHtmlSanitizer()
{
base.AllowedTags.Add("iframe");
base.AllowedAttributes.Add("id");
base.AllowedAttributes.Add("v-for");
}
}
}
然后我不得不在 global.asax 中注册它。这是代码:
protected void Application_Start(object sender, EventArgs e)
{
ObjectFactory.Initialized += RegisterCommonTypesEventHandler;
}
private void RegisterCommonTypesEventHandler(object sender, ExecutedEventArgs e)
{
if (e.CommandName == "RegisterCommonTypes")
{
ObjectFactory.Container.RegisterType<IHtmlSanitizer, SitefinityExtendedHtmlSanitizer>(new ContainerControlledLifetimeManager());
}
}
这一切都与 Sitefinity 10.2 有关。
韦德