【发布时间】:2010-01-18 18:17:13
【问题描述】:
我正在使用一些组件。页面渲染时,组件会生成 html 注释标签。如果我在一页上使用此组件 10 次,则 html cmets 插入 10 次。
如何在渲染页面前去除html评论标签?
【问题讨论】:
我正在使用一些组件。页面渲染时,组件会生成 html 注释标签。如果我在一页上使用此组件 10 次,则 html cmets 插入 10 次。
如何在渲染页面前去除html评论标签?
【问题讨论】:
使用服务器端 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
【讨论】:
根据第 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>
【讨论】:
什么样的组件?假设它是一个呈现 HTML cmets 的自定义服务器控件。每个服务器控件控制其将内容呈现给浏览器的过程。因此 HTML cmets 将由该控件呈现并直接呈现给浏览器。例如,如下所示:http://msdn.microsoft.com/en-us/library/aa338806%28VS.71%29.aspx 您可以创建自己的类,从该组件继承并更改渲染过程,但效率低下。
您可以使用 javascript 潜在地做到这一点,但我不得不问为什么这些 cmets 是一个问题?当您的应用程序以发布模式构建时,它们可能不会呈现给浏览器...
HTH。
【讨论】: