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

在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的父类如下:

ContractedBlock.gif ExpandedBlockStart.gif Code
 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字串就可以了

posted on 2009-05-15 09:30 BoolYang 阅读( ...) 评论( ...) 编辑 收藏

转载于:https://www.cnblogs.com/XiaoG/archive/2009/05/15/1457278.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值