【问题标题】:Getting error while changing meta tags dynamically动态更改元标记时出错
【发布时间】:2011-10-09 09:04:17
【问题描述】:

我有一个母版页,其中定义了元标记名称和描述。我不能让头部使用runat="server",因为我在 URL 路由方面遇到了一些问题,如果我这样做的话。

我想动态更改网站中某个子页面的元描述。我试过这个:

HtmlHead headTag = (HtmlHead)this.Header;
HtmlMeta pageMetaTag = new HtmlMeta();
pageMetaTag.Name = "Description";
pageMetaTag.Content = "Test";
headTag.Controls.Add(pageMetaTag);

但我在 Add 行收到一个错误,说:

Object reference not set to an instance of an object.

在头部内容中为子页面保留<head runat="server"></head> 时,页面会运行但元描述标签不会被覆盖。元描述与母版页的相同...... 请帮我解决这个问题....

使用:VS2010 中的 ASP.NET 4

更新(子页面看起来很像):

<%@ Page Title="" Language="C#" MasterPageFile="~/Site.master" AutoEventWireup="true" CodeFile="Profile.aspx.cs" Inherits="Profile"%>
<%@ Register assembly="AjaxControlToolkit" namespace="AjaxControlToolkit" tagprefix="ajax" %>

<asp:Content ID="Content1" ContentPlaceHolderID="HeadContent" Runat="Server">
    <head runat="server"></head>
    <style type="text/css" runat="server"> 
                   .lnkbtn
                    {
                        color: #000080;
                        cursor:pointer;
                    }
                    .lnkbtn:hover
                    {
                        color: #800000;
                        text-decoration: underline;
                    }
    </style>
<link rel="stylesheet" type="text/css" href='<%= ResolveUrl("~/css/back.css") %>'/>
    <script type="text/javascript" src='<%= ResolveUrl("~/css/front.js") %>'></script>
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" Runat="Server">
     // contains
     // update panel
     // webpartmanager
     // webpartzones
</asp:Content>

更新(Head 嵌套在 head 标签内)

使用Page.MetaDescription = "Hi How are you";时,页面来源如下:

<head>
    <titleMaster Page Title</title>
    <meta name="Keywords" content="Master page keywords" />
    <meta name="description" content="Master page meta description." />
    .
    .
    .
     <head><title>Child page Title</title>
     <meta name="description" content="Hi How are you" /></head>

    .
    .
    .
</head>

【问题讨论】:

  • 你用的是什么asp.net版本?
  • 好的,在那种情况下应该很容易,请参阅下面的答案

标签: c# asp.net html master-pages meta-tags


【解决方案1】:

试试这个

HtmlMeta keywords = new HtmlMeta();
keywords.Name = "keywords";
keywords.Content = "google, yahoo";
Header.Controls.Add(keywords);

请务必标记

<head runat="server">

【讨论】:

    【解决方案2】:

    在 Asp.net 4.0 中,您可以这样做:

    protected void Page_Load(object sender, EventArgs e)
    {
    
        Page.MetaDescription = "My page - a great page indeed";
        Page.MetaKeywords = "keyword1, two, three";
      }
    

    【讨论】:

    • 没用。描述与母版页的描述相同。让我明确一点,母版页在 aspx 中定义了关键字、描述标记,并且在 head 标记中没有 runat="server"。我无法让它在服务器上运行,因为我面临 URL 路由问题。在子页面 存在。问题是 head 嵌套在 head 标签下。我得到两个头标签一个内一个。外层是采用的母版页。内页是被拒绝的子页面。
    【解决方案3】:

    我认为你需要

    <head runat="server">
    

    Header.Controls.Add(pageMetaTag);
    

    至少我使用了这个确切的代码并且它可以工作

            HtmlMeta siteVerificationMeta = new HtmlMeta();
            siteVerificationMeta.Name = "xxxx";
            siteVerificationMeta.Content = "xxxx";
            Header.Controls.AddAt(0, siteVerificationMeta);
    

    编辑:我认为这是你需要的,你正在添加一个新的标题,你需要编辑如下

    请注意注释掉的行!!

         //HtmlHead headTag = (HtmlHead)this.Header;
         HtmlMeta pageMetaTag = new HtmlMeta();
         pageMetaTag.Name = "Description";
         pageMetaTag.Content = "Test";
         Header.Controls.Add(pageMetaTag);
    

    【讨论】:

    • 如果我在子页面的头部内容中允许runat server,即使这样,母版页元的描述也会显示......
    • 我可以看到子页面的样子吗?
    猜你喜欢
    • 2022-01-21
    • 1970-01-01
    • 2020-01-04
    • 2011-11-10
    • 1970-01-01
    • 1970-01-01
    • 2016-08-21
    • 2010-12-26
    • 1970-01-01
    相关资源
    最近更新 更多