zoukankan      html  css  js  c++  java
  • Asp.net中动态设置标题Title,Keyword,Descripton标签的方法

    在服务器代码中写如下代码 :

    HtmlMeta meta = new HtmlMeta();
    meta.Name = "description";
    meta.Content = mydr["s_title"].ToString() ;

    this.Page.Header.Controls.Add(meta);

    以前的方法

    方法一:

    <meta name="keywords" content=<%= keywords %> />
        <meta name="description" content=<%=description %> />

    注意content 后不要加双引号哟

    后台中进行赋值

    string keywords;
        string description;
        void Page_Load(object sender, EventArgs e)
         {
       keywords = "'+mydr["s_title"].ToString() + System.Configuration.ConfigurationSettings.AppSettings["keywords"] + '"';
            description = '"' + mydr["s_title"].ToString() + '"';
        
    }

    方法二:

    在aspx文件相应位置放上<asp:Literal id="keyword" runat="server"></asp:Literal>

    cs文件中的代码为:

    this.title=mydr["s_title"].ToString() ;

    this.keyword.Text = "<meta name='Keywords' content='" + mydr["s_title"].ToString() + "' /><meta name='Description' content='" + mydr["s_title"].ToString() + "' /> ";

    这样就可以做到动态设置title,keyword,Descripton了,

    相关知识 ASP:Literal控件用法:刚开始学.NET的朋友可能不清楚Literal和Label到底有什么区别,其实它们也只有一个区别,就是在转换成客户端Html代码后,Label就成了<span></span>,而Literal则是什么标记都不带

    以上出处:http://www.360doc.com/showWeb/0/0/300790573.aspx

    网页head区,不能用普通控件,但它有时又很重要,比如title、keywords、description,可能每个页面都不同,那么怎么样才能根据内容动态设置它们呢?
    方法1:asp能做到的,asp.net当然可以做到,只要你把整个页面都用Response.Write()写出来,没有什么不能自定义的,当然也可以"<%=某个成员%>"。但很明显,这样发挥不了.net的特点。


    方法2:利用asp.net的特有属性:runat="server",给title设置一个id,然后让它成为服务器变量,那就可以设置其文本了。但这样出来的html里边也会带有id,看着实在不爽。


    方法3:推荐 利用Literal控件,前台:     <HEAD>
            <asp:Literal ID="lt_title" Runat="server" />
            <asp:Literal ID="lt_keywords" Runat="server" />
            <asp:Literal ID="lt_descri" Runat="server" />
        </HEAD>后台:     private void Page_Load(object sender, System.EventArgs e)
        {
            lt_title.Text = "<title>标题</title>";
            lt_keywords.Text = "<meta name="keywords" content="关键字">";
            lt_descri.Text = "<meta name="description" content="描述">";
        }
    这样就基本达到完美了。

    更进一步,我的页面用了不少用户控件,并且这些用户控件有层次,而决定页面title的,可能是某个用户控件中的子用户控件来决定的,而且用户控件的嵌套层次不固定。 那要怎么来动态设置呢?

    首页,做一个用户控件的基类,并且给它增加1个public方法:

            public void SetTitle(string title)
            {
                SetLiteralText("lt_title", string.Format("<title>{0}</title>", title));
            }再增加一个private方法:
            private void SetLiteralText(string id, string text)
            {
                Literal lt = null;
                Control ctrl = this;
                do
                {
                    ctrl = ctrl.Parent;
                }while(ctrl != null && ctrl.GetType().FullName != "System.Web.UI.HtmlControls.HtmlForm" );

                if(ctrl != null)
                {
                    lt = ctrl.FindControl(id) as Literal;
                    if(lt != null)
                        lt.Text = text;
                }
            }
    这样,你的用户控件只需要让它继承自这个基类,然后在你想设置页面的title时调用base.SetTitle("标题"),就简单的完成了任务。对于head区其它标记,原理和设置title一样。

    以上出处:http://blog.sina.com.cn/s/blog_94a4c9720100yb7j.html

  • 相关阅读:
    [SCOI2015]国旗计划
    [SCOI2015]小凸玩矩阵
    点分治复习笔记
    [HNOI2014]米特运输
    [HNOI2015]接水果
    [HEOI2016/TJOI2016]游戏
    为什么验证集的loss会小于训练集的loss?
    转载GPU并行计算
    深度学习图像标注工具汇总(转载)
    你理解了吗?
  • 原文地址:https://www.cnblogs.com/ishibin/p/3197785.html
Copyright © 2011-2022 走看看