点击这里给我发消息 点击这里给我发消息

抛弃TitleContent - Asp.net MVC中页面标题的新解决方法

添加时间:2010-1-5
    相关阅读: 模板 页面 VC

在Asp.net MVC 1.0正式版中的模板页中提供了:

<asp:ContentPlaceHolder ID="TitleContent" runat="server" />

  这样可以让你在每个View中独立设定页面标题(Title),不过这样的弊端就是假如我的页面标题是如下形式:

  统一标题 - 副标题

  那么要在每个View中都写上:

  日记页面:

<asp:Content ID="Content1" ContentPlaceHolderID="TitleContent" runat="server">
    CaraQ - 日记
</asp:Content>

  相册页面:

<asp:Content ID="Content1" ContentPlaceHolderID="TitleContent" runat="server">
    CaraQ - 相册
</asp:Content>

……

  假如有一天我要把其中的统一标题改一下那就得一个页面一个页面的去改,太过麻烦,而且这种命名标题的方法我认为也有背MVC的精神--让控制器决定视图显示的内容

  其实有更简单的实现方法,如下:

  首先定义每个Controller的父类如下:

 public class BaseController : Controller
 {
        private readonly string _titleFormat = "CaraQ - {0}";
        private string _title;

        protected string Title
        {
            get { return _title; }
            set { _title = value; }
        }

protected override void OnActionExecuted(ActionExecutedContext filterContext)
        {
            ViewData["Title"] = string.Format(_titleFormat, Title);
            base.OnActionExecuted(filterContext);
        }
}

  让所有的Controller继承这个父类,设置页面标题的方法只需要在Action中使用如下方式即可:

public class BlogController : BaseController
{
    public ActionResult Index()
    {
        this.Title = "日记";
    }
}

  最后在模板页中把TitleContent占位控件换成:

<%=ViewData["Title"] %>

  这样就可以了,看到这样给页面命名标题是不是就简单多了,在View中了不会有那个像

<asp:Content ID="titleContent" ContentPlaceHolderID="TitleContent" runat="server"></asp:Content>

  的控件了,要修改统一标题时只需要修改BaseController中的_titleFormat字串就可以了

本文作者:未知
咨询热线:020-85648757 85648755 85648616 0755-27912581 客服:020-85648756 0755-27912581 业务传真:020-32579052
广州市网景网络科技有限公司 Copyright◎2003-2008 Veelink.com. All Rights Reserved.
广州商务地址:广东省广州市黄埔大道中203号(海景园区)海景花园C栋501室
= 深圳商务地址:深圳市宝源路华丰宝源大厦606
研发中心:广东广州市天河软件园海景园区 粤ICP备05103322号 工商注册