【问题标题】:Rendering Global Title渲染全局标题
【发布时间】:2012-10-24 15:41:43
【问题描述】:

我正在尝试从数据库中提取已保存的标题。我希望它每次都加载而不使用视图来调用它。所以我希望在从布局中调用它时拉出一个变量。我该怎么做?

在布局示例中:

@ViewBag.ShowTitle   

这将显示给呈现布局的每个页面。我不确定如何在没有控制器的情况下将数据库中的字段调用到屏幕上。

【问题讨论】:

    标签: asp.net-mvc asp.net-mvc-3 layout viewbag


    【解决方案1】:

    只需在您的_Layout.cshtml 页面中调用PartialView。

    @Html.Partial("_Title")
    

    但您确实需要Controller 与数据库交互并将Title 值分配给ViewBag。

    部分视图

    <div>
        <h2>
            @ViewBag.ShowTitle
        </h2>
    </div>
    

    您也可以按照以下链接中的说明进行操作,在该链接中定义ViewModel、Controller 并在_Layout.cshtml 内调用@Html.Action:

    ASP.NET MVC 3 _Layout.cshtml Controller

    【讨论】:

    • 有没有办法不使用控制器?我发现我必须为每一页添加标题,对于这么小的东西来说似乎有点太多工作了。
    • 不...在这种情况下你确实需要一个控制器。
    • 因此,如果我需要更改代码,我必须为控制器和 X 个页面的视图执行此操作。这似乎是回溯。
    • 每个页面的标题都相同,控制器属于特定页面。为了让我设置 ViewBag,我不需要在每个页面的 Controller 中创建调用吗?
    • 并非如此。请参阅答案中提供的链接中的示例。当他调用Html.Action("index", "mydata") 时,他告诉他他想要在mydata 控制器中实现index 操作方法。控制器可以像global 控制器,其动作方法可以被应用程序中的任何视图调用。没有任何迹象表明控制器特定于单个视图。希望你能明白。
    【解决方案2】:

    只有当您的数据库支持直接 Web 访问(如 Raven DB http://ravendb.net/docs/http-api)时,您才能避免使用控制器。

    但您也可以在会话中使用技巧。比如你可以在 global.asax 中读取标题并将其保存到 Session 中,并在页面上使用 session 变量,但是这样写代码是非常糟糕的。

    【讨论】:

    猜你喜欢
    • 2013-11-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多