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 有关。

韦德