【问题标题】:Asp.net Mvc: Dynamic page titleAsp.net Mvc:动态页面标题
【发布时间】:2009-08-29 19:18:30
【问题描述】:

在网络表单中,我总是使用我的母版页来根据当前 url 设置页面标题和元描述。我正在考虑为我的 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 的新手,所以我不确定在哪里初始化它。

【问题讨论】:

  • 我希望可以稍微更新一下我的问题。评论其他问题似乎不正确,发布答案听起来更愚蠢。
  • 不,如果您对问题有新的信息/见解,更新您的问题绝对没问题。最好像您所做的那样添加编辑/更新。 :)

标签: asp.net-mvc title


【解决方案1】:

我建议以下策略:

创建模型层次结构:

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>

它已经完成了。

【讨论】:

  • 这个模型如何暴露在母版页中?我是这方面的菜鸟。
  • 控制器将 ViewModel 发送到视图,并在控制器中设置 PageTitle 属性。
【解决方案2】:

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

【讨论】:

    【解决方案3】:

    所以经过几天的尝试,我最终制作了一个从 XML 文件读取的自定义过滤器。

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

    我对 Asp.net Mvc 和“真正的”C# 编码非常陌生,所以如果您看到奇怪的东西,请原谅我。如果有人想优化它或有更好的解决方案,请随时将其发布为答案。

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

    【讨论】:

    • 链接都失效了
    猜你喜欢
    • 1970-01-01
    • 2010-10-12
    • 1970-01-01
    • 1970-01-01
    • 2017-01-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多