如何在asp.net中渲染之前删除html注释标记

时间:2010-01-18 18:17:13

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

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

如何在渲染页面之前删除html注释标记?

3 个答案:

答案 0 :(得分:2)

使用服务器端评论:

<%--
    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

答案 1 :(得分:1)

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

你可以使用javascript来做这件事,但我不得不问为什么这些评论是个问题?当您的应用程序以发布模式构建时,可能无法呈现给浏览器...

HTH。

答案 2 :(得分:1)

基于第三方程序集创建自定义服务器控件,如下所示:

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>