none
母版页的内容页Title问题 RRS feed

  • 问题

  • 首先MasterPage.master head没有加ruant=server 如果添加页面代码排列不好看。
    内容页:<%@ Page Language="C#" AutoEventWireup="true" CodeFile="new_list.aspx.cs" MasterPageFile="~/MasterPage.master" Inherits="new_list"  %>

    现在我内容页title是继承自母版页。我想让他不继承自母版页,而是我new_list.aspx.cs 代码里我 自己从数据库里读取出来可以定义一个变量 public static string PagTitle=string.Empty;
    关键是我 PageTitle 无法在:<%@ Page Language="C#" AutoEventWireup="true" CodeFile="new_list.aspx.cs" MasterPageFile="~/MasterPage.master" Inherits="new_list"  Title=<%=PageTitle %> %>
    注意上面代码部分  Title=<%=PageTitle %>  如果不引入母版页 ,单独的html页 可以在<title><%=PageTitle %> </title>即可实现。如果该页面用了母版页,那么内容页的title 怎么动态获取,切不希望是在MasterPage里的head 加ruant=server

    2009年10月14日 4:52

答案

  • 哦。你说的不要加 head 加ruant=server 啊。?加一个Litgeral控件也可以。

    另外也可以这样

    Page.ClientScript.RegisterStartupScript(Page.GetType(),"js","document.title='内容页的标题'",true);

    • 已标记为答案 极度 2009年10月14日 6:07
    2009年10月14日 5:27
    版主
  • 你好!

    head 加上 runat=server 就可以了无须关心生成 html 的排列格式。

    知识改变命运,奋斗成就人生!
    • 已标记为答案 极度 2009年10月14日 6:07
    2009年10月14日 6:02
    版主

  • 也可以这样

    <head>
      <asp:Literal ID="h" runat="server"/>
    </head>


    <%@ Page Language="C#" MasterPageFile="~/MasterPage.master"%>

    <script runat="server">

      protected void Page_Load(object sender, EventArgs e)
      {
        Literal h = Page.Master.FindControl("h") as Literal;
        h.Text = "<title>xx</title>";
      }
    </script>
    <asp:Content ContentPlaceHolderID="ContentPlaceHolderMain" ID="s" runat="server"></asp:Content>

    【孟子E章】
    • 已标记为答案 极度 2009年10月14日 6:24
    2009年10月14日 6:08
    版主
  • 也可以这样

    <%@ Page Language="C#" AutoEventWireup="true"%>
    <script runat="server">
        protected void Page_Load(object sender, EventArgs e)
        {
            StringBuilder b = new StringBuilder();
            b.AppendLine();
            b.AppendLine("<title>测试title</title>");
            b.AppendLine("<meta name=\"keywords\" content=\"测试,sss\" />");
            b.AppendLine("<meta name=\"description\" content=\"测试,sss\" />");
            b.AppendLine("<link href=\"css/css.css\" rel=\"stylesheet\" type=\"text/css\" />");

            this.CustomHead.Text = b.ToString();
        }
    </script>
    <!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>
        <asp:Literal ID="CustomHead" runat="server"></asp:Literal>
    </head>
    <body>
        <form id="form1" runat="server">
        </form>
    </body>
    </html>

    知识改变命运,奋斗成就人生!
    • 已标记为答案 极度 2009年10月14日 8:07
    2009年10月14日 7:00
    版主

全部回复

  • 哦。你说的不要加 head 加ruant=server 啊。?加一个Litgeral控件也可以。

    另外也可以这样

    Page.ClientScript.RegisterStartupScript(Page.GetType(),"js","document.title='内容页的标题'",true);

    • 已标记为答案 极度 2009年10月14日 6:07
    2009年10月14日 5:27
    版主
  • 孟老师  Page.Title = PagTitle; 是要页面的head 里面有ruant=server才可以否则页面运行会提示错误信息 需要加ruant=server

    你说的加控件这个,是添加到MasterPage.master的head里吧 这样我引子母版页里的内容页 在
     protected void Page_Load(object sender, EventArgs e)
        {
            //这样在这里Page.Master.Page.FindControl() ; 还是是需要页面加ruant=server
       }
    因为加了ruant=server
    页面 head 就都聚集一其了,然后head里不可以有</br > 不明白head里如果有ruant=server 页面输出head会是排列这个样子
    <title>
     测试title
    </title><meta name="keywords" content="测试,sss" /><meta name="description" content="测试,sss"%>" /><link href="css/css.css" rel="stylesheet" type="text/css" /></head>

    而不是

    <title> 测试title</title>
     <meta name="keywords" content="测试,sss" />
     <meta name="description" content="测试,sss" />
    <link href="css/css.css" rel="stylesheet" type="text/css" />

    2009年10月14日 5:42
  • 使用Page.ClientScript.RegisterStartupScript(Page.GetType(),"js","document.title='内容页的标题'",true); 可以解决title,
    如还有页面的keywords,description?
    2009年10月14日 5:54
  • 使用Page.ClientScript.RegisterStartupScript(Page.GetType(),"js","document.title='内容页的标题'",true); 可以解决title,
    如还有页面的keywords,description?
    那加上 head 加ruant=server不是很好的吗?加这个对你有什么影响吗?
    【孟子E章】
    2009年10月14日 5:59
    版主
  • 你好!

    head 加上 runat=server 就可以了无须关心生成 html 的排列格式。

    知识改变命运,奋斗成就人生!
    • 已标记为答案 极度 2009年10月14日 6:07
    2009年10月14日 6:02
    版主
  • 其实我最开始也是加上的,是客户的挑剔。实在不行我也只有加了。
    2009年10月14日 6:02

  • 也可以这样

    <head>
      <asp:Literal ID="h" runat="server"/>
    </head>


    <%@ Page Language="C#" MasterPageFile="~/MasterPage.master"%>

    <script runat="server">

      protected void Page_Load(object sender, EventArgs e)
      {
        Literal h = Page.Master.FindControl("h") as Literal;
        h.Text = "<title>xx</title>";
      }
    </script>
    <asp:Content ContentPlaceHolderID="ContentPlaceHolderMain" ID="s" runat="server"></asp:Content>

    【孟子E章】
    • 已标记为答案 极度 2009年10月14日 6:24
    2009年10月14日 6:08
    版主
  • 也可以这样

    <%@ Page Language="C#" AutoEventWireup="true"%>
    <script runat="server">
        protected void Page_Load(object sender, EventArgs e)
        {
            StringBuilder b = new StringBuilder();
            b.AppendLine();
            b.AppendLine("<title>测试title</title>");
            b.AppendLine("<meta name=\"keywords\" content=\"测试,sss\" />");
            b.AppendLine("<meta name=\"description\" content=\"测试,sss\" />");
            b.AppendLine("<link href=\"css/css.css\" rel=\"stylesheet\" type=\"text/css\" />");

            this.CustomHead.Text = b.ToString();
        }
    </script>
    <!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>
        <asp:Literal ID="CustomHead" runat="server"></asp:Literal>
    </head>
    <body>
        <form id="form1" runat="server">
        </form>
    </body>
    </html>

    知识改变命运,奋斗成就人生!
    • 已标记为答案 极度 2009年10月14日 8:07
    2009年10月14日 7:00
    版主
  • 感谢 孟老师。感谢X.X.Y 感谢MSDN 自己写了个方法
    Tkd.cs
     public static string Titkede(Page page, string title, string keywords, string description)
        {
            string tkb=string.Empty;
            StringBuilder strbul = new StringBuilder();
            strbul.Append("<title>"+title+"</title>").Append("\n");
            string strSql = "select siKeywords,siDescription from SiteInfoTable";
            DataTable dt = DB.GetDt(strSql);
            if (dt.Rows.Count > 0)
            {
                strbul.Append("<meta name=\"keywords\" content=\"" +dt.Rows[0][0].ToString()+ "\" />").Append("\n");
                strbul.Append("<meta name=\"description\" content=\"" + dt.Rows[0][1].ToString() + "\" />");
            }       
            tkb = strbul.ToString();
            return tkb;
        }
    母版页HTML
    <head>
    <asp:Literal ID="Literal1" runat="server"></asp:Literal>
    </head>


    母版页的内容页.cs
     protected void Page_Load(object sender, EventArgs e)
        {
            Literal l1 = (Literal)Page.Master.FindControl("Literal1");
            l1.Text = Tkd.Titkede(this, "title", "keywords", "description");
        }

     
    2009年10月14日 8:13
  • 你好可以直接<%=变量名字>
    【孟子E章】
    2009年10月14日 8:49
    版主