【问题标题】:Write to global ViewBag from partial view in ASP.Net Core从 ASP.Net Core 中的部分视图写入全局 ViewBag
【发布时间】:2017-11-16 03:40:18
【问题描述】:

在使用 ASP.Net Core 2.0 编写的应用程序中,如何在部分视图中写入全局 ViewBag?部分获取是它自己的本地 ViewBag,所以我在那里写的任何东西都不会存储在全局 ViewBag 中。

例如,假设“Home/Index”视图呈现一个局部“_TitleBar”,在这个局部内我们设置 ViewBag.PageName =“MyPage”。现在,稍后在同一个请求中,在“_Layout”中,我想呈现存储在 ViewBag.PageName 中的任何值。这在上述情况下不起作用。那么如何从我的“_TitleBar”访问全局 ViewBag 以便可以在其他地方获取该值?

目前,解决方法是将数据存储在 TempData 中,而不是全局存储。

【问题讨论】:

    标签: asp.net-core asp.net-core-mvc


    【解决方案1】:

    Razor 渲染实际页面,然后是布局,然后是局部视图,这就是局部视图不能具有部分等功能的原因。您可以使用 JavaScriptJQuery 来完成此操作,而无需依赖 Razor。您所要做的就是在局部视图中添加一个脚本来更新PageName。例如:

    _Layout.cshtml
    ------------------
    <title>Site Name | Page Name </title>
    
    _partial.cshtml
    <script type="text/javascript">
        $(document).ready(function () {
             document.title = "new title";
        })
    </script>
    

    【讨论】:

    • 感谢您的建议,但继续使用 TempData 似乎是一个更简单的解决方案。
    • @NeoDarque:我不认为依赖TempData 会是一个更简单的解决方案,同时它也不是一个好方法。假设所有服务器端编码最终将由 Razor 视图引擎呈现为纯 HMTM/Javascript,那么您最好首先依赖客户端编码。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-16
    • 1970-01-01
    • 2017-06-20
    • 2021-05-04
    • 2012-10-09
    相关资源
    最近更新 更多