我有这段代码可以删除我无法访问的现有元标记,因为它在它附带的解决方案 dll 中,但基本上,我想删除它随附于我们公司内容的元标记内容。问题是它没有找到元标记,我认为是因为我设置 htmlHead = Page.Header
; 的方式。我想我在那里遗漏了一些东西..但不确定..这段代码在基类的虚拟 Page_Load
中。
HtmlHead pHtml = Page.Header;
for (int i = pHtml.Controls.Count - 1; i >= 0; i--)
{
if (pHtml.Controls[i] is HtmlMeta)
{
pMeta thisMetaTag = (HtmlMeta)pHtml.Controls[i];
if (thisMetaTag.Name == mName)
{
pHtml.Controls.RemoveAt(i);
}
}
}
我不确定我是否对 header 进行了正确的重定向,因为这是在基类中的虚拟 Page_Load
中。此外,大部分代码取自 (99%) 来自此处 Code for meta tag removal and replacement
任何帮助将不胜感激
最佳答案
这可能是事件发生顺序的问题。我在 ASP.NET 中创建了一个新页面
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="FormMail.WebForm1" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>Untitled Page</title>
<meta http-equiv="keyword" name="testy" content="default content" />
</head>
<body>
<form id="form1" runat="server">
<div>
</div>
</form>
</body>
</html>
然后我使用了:
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
string mName = "testy";
HtmlHead pHtml = Page.Header;
foreach (HtmlMeta metaTag in pHtml.Controls.OfType<HtmlMeta>())
{
if (metaTag.Name.Equals(mName, StringComparison.CurrentCultureIgnoreCase))
{
metaTag.Content = "Yeah!";
break; //You could keep looping to find other controls with the same name, but I'm exiting the loop
}
}
//for (int i = pHtml.Controls.Count - 1; i >= 0; i--)
//{
// if (pHtml.Controls[i] is HtmlMeta)
// {
// HtmlMeta thisMetaTag = (HtmlMeta)pHtml.Controls[i];
// if (thisMetaTag.Name == mName)
// {
// thisMetaTag.Content = "Yeah!";
// // pHtml.Controls.RemoveAt(i);
// }
// }
//}
}
}
当我查看源代码时,我看到元标记的内容被修改了。现在,您的问题可能是在循环时,控件不存在(尚未添加)并且您正在添加它,然后内置代码正在添加它。
编辑 - 建议将代码移动到 PreRender,以防在加载之后但在呈现之前添加控件
protected override void OnPreRender(EventArgs e)
{
if (!IsPostBack)
{
string mName = "testy";
HtmlHead pHtml = Page.Header;
foreach (HtmlMeta metaTag in pHtml.Controls.OfType<HtmlMeta>())
{
if (metaTag.Name.Equals(mName, StringComparison.CurrentCultureIgnoreCase))
{
metaTag.Content = "Yeah!";
break;
}
}
}
base.OnPreRender(e);
}
关于c# - 修改现有元标记,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8435950/