ASP.NET / DotNetNuke - 将 HTML 从用户控件附加到正文

本文关键字:控件 用户 正文 HTML NET DotNetNuke ASP | 更新日期: 2023-09-27 18:30:49

我试图在代码隐藏中从 ASP.NET 用户控件/DotNetNuke Skin添加HTML(特别是Google标签管理器代码段),紧跟在开始正文标签之后。

我尝试了以下代码:

protected override void OnInit(EventArgs e)
{
    base.OnInit(e);
    this.Page.PreLoad += new EventHandler(Page_PreLoad);
}
protected void Page_PreLoad(object sender, EventArgs e)
{
    HtmlGenericControl body = (HtmlGenericControl) Page.FindControl("ctl00$body");
    body.Controls.AddAt(0, new Literal() {ID = "GoogleTagManager", Text = "(...)" };
}

到目前为止,这很有效;HTML出现在所需的位置。但我注意到,每当执行代码时,似乎都没有处理以下PostBacks

我无法将HTML放入.aspx页面,因为我们有多个DotNetNuke门户,我们不希望使用相同的代码片段。

有谁知道如何在保持回发工作的同时实现这一目标的解决方案?

__

来自瑞士的感谢和问候

拉斐尔

ASP.NET / DotNetNuke - 将 HTML 从用户控件附加到正文

为此,可以使用客户端资源管理器占位符。

http://www.dnnsoftware.com/wiki/Page/Client-Resource-Management-API

具体来说,在网站的默认.aspx文件中,您将看到一个 BodySCRIPTS 占位符。

或者如果你愿意,你可以通过访问页面库来定位 Body ID 元素,我做了类似的事情来控制页面的标题 https://dnnsimplearticle.codeplex.com/SourceControl/latest#cs/Controls/ArticleView.ascx.cs

var tp = (CDefault)Page;
tp.Title = curArticle.Title;

您可以在httpdocs下修改SiteAnalytics.config文件并适应:

身体真

这将应用于在管理员>谷歌分析下拥有谷歌控制权的门户网站

但我不知道为什么,回发不适用于此解决方案。

您对此有解决方案吗?DNN 是否与 GTM 不兼容

刚刚发现谷歌跟踪代码管理器脚本可以添加到正文标签之后,这可以在default.ascx中找到

    <%@ Page Language="vb" AutoEventWireup="false" Explicit="True" Inherits="DotNetNuke.Framework.DefaultPage" CodeFile="Default.aspx.vb" %>
<%@ Register TagPrefix="dnn" Namespace="DotNetNuke.Common.Controls" Assembly="DotNetNuke" %>
<asp:literal id="skinDocType" runat="server"></asp:literal>
<html<%= HtmlAttributeList %>>
<head id="Head" runat="server">
    <meta content="text/html; charset=UTF-8" http-equiv="Content-Type"/>
    <meta content="text/javascript" http-equiv="Content-Script-Type"/>
    <meta content="text/css" http-equiv="Content-Style-Type"/>
    <meta id="MetaRefresh" runat="Server" http-equiv="Refresh" name="Refresh" />
    <meta id="MetaDescription" runat="Server" name="DESCRIPTION" />
    <meta id="MetaKeywords" runat="Server" name="KEYWORDS" />
    <meta id="MetaCopyright" runat="Server" name="COPYRIGHT" />
    <meta id="MetaGenerator" runat="Server" name="GENERATOR" />
    <meta id="MetaAuthor" runat="Server" name="AUTHOR" />
    <meta name="RESOURCE-TYPE" content="DOCUMENT" />
    <meta name="DISTRIBUTION" content="GLOBAL" />
    <meta id="MetaRobots" runat="server" name="ROBOTS" />
    <meta name="REVISIT-AFTER" content="1 DAYS" />
    <meta name="RATING" content="GENERAL" />
    <meta http-equiv="PAGE-ENTER" content="RevealTrans(Duration=0,Transition=1)" />
    <link href="StyleSheets/LPStyles.css" type="text/css" rel="stylesheet">
    <style type="text/css" id="StylePlaceholder" runat="server"></style>
    <asp:placeholder id="CSS" runat="server" />
</head>
<body id="Body" runat="server" >
<!-- Google Tag Manager -->
<noscript><iframe src="//www.googletagmanager.com/ns.html?id=XXX-XXXXXX"
height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
<script>(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=
'//www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);
})(window,document,'script','dataLayer','GTM-TK4KKM');</script>
<!-- End Google Tag Manager -->
<!-- Google Tag Manager -->
<noscript><iframe src="//www.googletagmanager.com/ns.html?id=XXX-XXXXXX"
height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
<script>(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=
'//www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);
})(window,document,'script','dataLayer','XXX-XXXXXX');</script>
<!-- End Google Tag Manager -->
    <dnn:Form id="Form" runat="server" ENCTYPE="multipart/form-data" >
        <asp:Label ID="SkinError" runat="server" CssClass="NormalRed" Visible="False"></asp:Label>
        <asp:PlaceHolder ID="SkinPlaceHolder" runat="server" />
        <input id="ScrollTop" runat="server" name="ScrollTop" type="hidden" />
        <input id="__dnnVariable" runat="server" name="__dnnVariable" type="hidden" />
    </dnn:Form>
</body>
</html>

我正在尝试将 GTM 添加到 DNN 门户。我已经阅读了一些关于此的帖子,但无法提出解决方案。我知道您可以添加到默认.aspx页面,但就我而言,它必须通过皮肤包添加。

我尝试使用 cs 或 VB 页面,但无法让它向 Body 标签添加控件。

我可以向正文标签添加一个属性,但尝试添加控制器总是失败。@rapael你提到"var tp = (CDefault)Page;RPHFindControl("Body")。Controls.AddAt(0, new Literal() { Text = " });

"您

能否提供更多关于您如何实施的细节?谢谢