在 MVC 正式版中的模板页中提供了<asp:ContentPlaceHolder ID=TitleContent runat=server />
这样可以让你在每个View中独立设定页面标题(Title)不过这样的弊端就是假如我的页面标题是如下形式统一标题 副标题
那么要在每个View中都写上日记页面
<asp:Content ID=Content ContentPlaceHolderID=TitleContent runat=server>
CaraQ 日记
</asp:Content>
相册页面
<asp:Content ID=Content ContentPlaceHolderID=TitleContent runat=server>
CaraQ 相册
</asp:Content>
……
假如有一天我要把其中的统一标题改一下那就得一个页面一个页面的去改太过麻烦而且这种命名标题的方法我认为也有背MVC的精神让控制器决定视图显示的内容
其实有更简单的实现方法如下
首先定义每个Controller的父类如下
Code
public class BaseController : Controller
{
private readonly string _titleFormat = CaraQ {};
private string _title;
protected string Title
{
get { return _title; }
set { _title = value; }
}
protected override void OnActionExecuted(ActionExecutedContext filterContext)
{
ViewData[Title] = stringFormat(_titleFormat Title);
baseOnActionExecuted(filterContext);
}
}
让所有的Controller继承这个父类设置页面标题的方法只需要在Action中使用如下方式即可
public class BlogController : BaseController
{
public ActionResult Index()
{
thisTitle = 日记;
}
}
最后在模板页中把TitleContent占位控件换成:
<%=ViewData[Title] %>
这样就可以了看到这样给页面命名标题是不是就简单多了在View中了不会有那个像
<asp:Content ID=titleContent ContentPlaceHolderID=TitleContent runat=server></asp:Content>
的控件了要修改统一标题时只需要修改BaseController中的_titleFormat字串就可以了