【问题标题】:ASP.NET Page ViewData Overwritten (missing)ASP.NET 页面 ViewData 被覆盖(缺失)
【发布时间】:2018-05-29 02:14:21
【问题描述】:

_ViewStart.cshtml 的内容

@{
    Layout = "_Layout";
    ViewData["IndexLink"] = Context.Request.Path != "/" ? "/Index" : "";
}

Downloads.cshtml 的内容

@page
@model DownloadsModel
@{
    ViewData["Title"] = "Downloads";
}

来自 _Layout.cshtml 的片段

<title>@ViewData["Title"] - ABC Sofware LLC</title>

问题:

&lt;title&gt; 标记正在呈现,但没有视图的标题。

故障排除步骤:

我在_Layout.cshtml 中设置了一个断点,看看是什么 ViewData 包含。它只有一把钥匙,而不是两把。

@ViewData.Keys
    Count = 1
    [0]: "IndexLink"

如果我从 _ViewStart.cshtml 中删除 ViewData["IndexLink"] 行,则设置 ViewData["Title"]

@ViewData.Keys
    Count = 1
    [0]: "Title"

为什么在_ViewStart.html 中设置ViewData 键会破坏视图中的ViewData

【问题讨论】:

  • 我尝试了同样的场景,它似乎工作正常。您是如何创建项目的?
  • @AntonySamyJoseph VS2017 > 新的 ASP.NET Core Web 应用程序 > Web 应用程序。我刚刚尝试了一个全新的测试项目,问题是一样的。
  • 我也试过同样的配置..但是asp.net core 2.0..
  • 我也用的是2.0版
  • 我遇到了同样的问题。似乎在 Core 2.x 中,如果在 _Layout.cshtml 中设置了任何键,则会覆盖 ViewData

标签: razor asp.net-core asp.net-core-2.0


【解决方案1】:

目前看来这是一个错误(请参阅 https://github.com/aspnet/Mvc/issues/7675 -- 计划在 Core 2.2.0 中修复),但当前的解决方法是:

ViewData["Key"]

你会使用

ViewContext.ViewData["Key"]

在 _ViewStart.cshtml 和 Downloads.cshtml 中。参考

@ViewData["Key"]

在 _Layout.cshtml 中对我来说似乎仍然可以正常工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-12-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-17
    • 2018-02-24
    • 1970-01-01
    相关资源
    最近更新 更多