Asp.net Mvc:动态页面标题

时间:2009-08-28 08:38:11

标签: asp.net-mvc title

webforms中的

我总是会使用我的母版页根据当前网址设置页面标题和元描述。我想为我的Asp.net Mvc项目做同样的事情,但我不知道从哪里开始。能够根据控制器和/或动作设置标题/描述并使用一些默认值,这将是很好的,因为我没有指定任何信息。我这样做的原因是因为我喜欢一切都在一个地方,因为这样可以很容易地发现错误。

修改
在阅读了答案并搜索了一些后,我认为从xml文件中获取信息可能很酷。随着Xml看起来像这样:

<website title="default title for webpage">
    <controller name="HomeController" title="Default title for home controller"> 
       <action name="Index" title="title for index action" />
    </controller>
</website>

我是Asp.net Mvc的新手,所以我不确定在哪里初始化它。

3 个答案:

答案 0 :(得分:7)

我建议采用以下策略:

创建模型层次结构:

abstract class MasterModel
{
    public string PageTitle { get; set; }
}

abstract class HomeBaseModel : MasterModel
{
    PageTitle = "Home";
}

abstract class UsersBaseModel : MasterModel
{
    PageTitle = "Users";
}

/************************************/

class HomeNewsModel : HomeBaseModel
{
    PageTitle = "News";
}

class UsersProfileModel : UsersBaseModel
{
    PageTitle = "Profile";
}

您可以定义一个主模型来保存页面标题,并创建基本模型来保存控制器的默认标题。这样,您可以显式定义每个操作中的标题,也可以将其保留,以便使用此控制器的默认标题。

然后在您的主视图中,您只需编写一次:

<title><%= Model.PageTitle %></title>

已经完成了。

答案 1 :(得分:0)

您可以简单地从母版页的模型中提取该数据,然后让该模型具有一些合理的默认值。

答案 2 :(得分:0)

因此,在尝试了几天之后,我最终制作了一个从XML文件中读取的自定义过滤器。

我将代码添加到copypastecode.com
http://www.copypastecode.com/9797/
http://www.copypastecode.com/9809/
http://www.copypastecode.com/9805/

我是Asp.net Mvc的新手和“真正的”C#编码所以如果你看到奇怪的东西请原谅我。如果有人想要优化它或有更好的解决方案随时发布它作为答案。

接下来我要尝试的是没有过滤器,所以它在所有控制器上激活。不知道在哪里连接逻辑。所以,如果有人能让我走向正确的方向,请告诉我。