职业IT人-IT人生活圈

 找回密码
 成为会员
搜索
查看: 1048|回复: 0

ASP.NET页面HEAD区动态设置全攻略

[复制链接]
joe 发表于 2007-2-10 20:04 | 显示全部楼层 |阅读模式
  网页head区,不能用普通控件,但它有时又很重要,比如title、keywords、description,可能每个页面都不同,那么怎么样才能根据内容动态设置它们呢?

  方法1:asp能做到的,asp.net当然可以做到,只要你把整个页面都用Response.Write()写出来,没有什么不能自定义的,当然也可以\"<%=某个成员%>\"。但很明显,这样发挥不了.net的特点。

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

  方法3:利用Literal控件,前台:

     <HEAD>
        <aspiteral ID=\"lt_title\" Runat=\"server\" />
        <aspiteral ID=\"lt_keywords\" Runat=\"server\" />
        <aspiteral 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一样。
您需要登录后才可以回帖 登录 | 成为会员

本版积分规则

QQ|手机版|小黑屋|网站帮助|职业IT人-IT人生活圈 ( 粤ICP备12053935号-1 )|网站地图
本站文章版权归原发布者及原出处所有。内容为作者个人观点,并不代表本站赞同其观点和对其真实性负责,本站只提供参考并不构成任何投资及应用建议。本站是信息平台,网站上部分文章为转载,并不用于任何商业目的,我们已经尽可能的对作者和来源进行了通告,但是能力有限或疏忽造成漏登,请及时联系我们,我们将根据著作权人的要求立即更正或者删除有关内容。

GMT+8, 2024-5-13 21:41 , Processed in 0.114704 second(s), 20 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表