首页 > 编程 > .NET > 正文

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

2024-07-10 13:10:08
字体:
来源:转载
供稿:网友


收集最实用的网页特效代码!

  网页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一样。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表