【问题标题】:how to remove html comment tag before render in asp.net如何在asp.net中渲染之前删除html注释标签
【发布时间】:2010-01-18 18:17:13
【问题描述】:

我正在使用一些组件。页面渲染时,组件会生成 html 注释标签。如果我在一页上使用此组件 10 次,则 html cmets 插入 10 次。

如何在渲染页面前去除html评论标签?

【问题讨论】:

    标签: c# asp.net .net-3.5


    【解决方案1】:

    使用服务器端 cmets:

    <%--
        Commented out HTML/CODE/Markup.  Anything with
        this block will not be parsed/handled by ASP.NET.
    
        <asp:Calendar runat="server"></asp:Calendar> 
    
       <%# Eval(“SomeProperty”) %>     
    --%>
    

    或仅在调试模式下呈现评论

    #if DEBUG
    // Add my comment for debug only
    #endif
    

    【讨论】:

    • 我没有这个组件源代码。只有组装。如果我有来源,我已经修复了它
    • 如果你有源代码可以解决这个问题,试试这个:red-gate.com/products/reflector
    【解决方案2】:

    根据第 3 方程序集创建自定义服务器控件,如下所示:

    namespace ServerControls
    {
        [ToolboxData("<{0}:LabelWithComment runat=server></{0}:LabelWithComment>")]
        public class LabelWithComment : Label
        {
            protected override void Render(HtmlTextWriter output)
            {
                var htmlFromBaseClass = new StringBuilder();
                var htmlTextWriterForBaseClass = 
                    new HtmlTextWriter(new StringWriter(htmlFromBaseClass));
                base.Render(htmlTextWriterForBaseClass);
                var modifiedHtml = ModifyHtmlUsing(htmlFromBaseClass);
                output.Write(modifiedHtml);
            }
    
            private static string ModifyHtmlUsing(StringBuilder stringBuilder)
            {
                stringBuilder.Replace("<!-- some comment -->", "");
                return stringBuilder.ToString();
            }
        }
    }
    

    然后自定义 ModifyHtmlUsing 方法以替换您想要的任何内容。

    然后在您使用控件的页面上包含此指令:

    <%@ Register Assembly="ServerControls" Namespace="ServerControls" TagPrefix="Custom"  %>
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server">
        <title></title>
    </head>
    <body>
        <form id="form1" runat="server">
        <div>
        <Custom:LabelWithComment ID="lblLabelWithComments" 
            Text="Some Text <!-- some comment -->" runat="server" />
        </div>
        </form>
    </body>
    </html>
    

    【讨论】:

      【解决方案3】:

      什么样的组件?假设它是一个呈现 HTML cmets 的自定义服务器控件。每个服务器控件控制其将内容呈现给浏览器的过程。因此 HTML cmets 将由该控件呈现并直接呈现给浏览器。例如,如下所示:http://msdn.microsoft.com/en-us/library/aa338806%28VS.71%29.aspx 您可以创建自己的类,从该组件继承并更改渲染过程,但效率低下。

      您可以使用 javascript 潜在地做到这一点,但我不得不问为什么这些 cmets 是一个问题?当您的应用程序以发布模式构建时,它们可能不会呈现给浏览器...

      HTH。

      【讨论】:

      • 好的。不幸的是,它使您脱离了渲染过程;我希望有一个简单的方法,但是我不知道有什么方法可以简单地覆盖一些内部进程,除非它们允许您配置它(通过属性将其关闭),或者使用 JS 代码删除 cmets,这我认为您可以这样做,但不是 100% 确定...如果您有支持,您可以请求将属性添加为功能,以将其关闭。
      猜你喜欢
      • 2016-11-05
      • 2014-11-16
      • 2020-10-10
      • 2018-01-31
      • 1970-01-01
      • 1970-01-01
      • 2013-09-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多