在 Sitefinity 11 中 - 可以通过 MVC 小部件在基本模板中生成自定义 html/script 到 html 部分或标记

In Sitefinity 11 - Possible to generate custom html/script to html section or tag in base template via MVC widget

我想我应该首先提到我对 Sitefinity 和 MVC 都比较陌生,感谢您的帮助。到目前为止,我对这个主题的研究一无所获。

因此,我们希望通过一个小部件将自定义 html 和/或脚本放置在我们网页上 body 标记的末尾,我们可以将其拖放到特定页面或页面模板上。我愿意接受任何关于实现这一目标的建议,但到目前为止我一直在尝试的是通过放置在我们的自定义基本模板上的引用来实现这一目标。

在 .cshtml 中,我注意到默认情况下 Sitefinity 有 @Html.Section("head")、@Html.Section("top") 和@Html.Section("bottom")。有没有一种方法可以让我从 MVC 小部件或视图直接写入此 "bottom" 部分?

我已经尝试过上述方法,以及其他方法,例如在基本布局中使用 RenderSection:

@if (IsSectionDefined("MyOtherJavascript"))
{
   @RenderSection("MyOtherJavascript");
}

然后在小部件视图中:

@section MyOtherJavascript 
{
   <script type="text/javascript">
     // some code
   </script>
}

但是当我这样做时,出现如下错误:

[layoutname].cshtml" cannot be requested directly because it calls the "IsSectionDefined" method.

感谢您提供的任何见解。

解决这个问题的一种方法是在您的主布局 cshtml 文件中创建一个新的 "placeholder area" 文件,就在结束 body 标记的正上方。

示例:

<body>
@Html.SfPlaceHolder("Header")
@Html.SfPlaceHolder("Main")
@Html.SfPlaceHolder("Footer")

@Html.SfPlaceHolder("BeforeClosingBody")
</body>

这将在 Sitefinity 页面编辑模式下创建一个可拖动区域,因此您可以将任何您想要的小部件拖动到该区域,包括内容块小部件(对于任意 html)或 Javascript 小部件(对于任何 js 代码)。

有关 sfPlaceHolder 的更多详细信息,请参见 official documentation