ViewData不会传递到ASP.NET Core 2.1中的布局

0xa*_*yan 4 c# asp.net asp.net-mvc asp.net-core razor-pages

已编辑

我有一个ASP.NET Core 2.1网站,我已将其所有Identity项目都放置在脚手架中。脚手架过程在以下位置创建了一个布局文件:

/Areas/Identity/Pages/Account/Manage/_Layout.cshtml

当我想全局使用布局时,我已经将布局文件(带有剪切粘贴)移动到了这个新位置:

/Views/Shared/AdminLayout/_Layout.cshtml

然后_ViewStart.cshtml在第一个位置创建一个文件,以在第二个位置使用布局。_ViewStart文件的内容是这样的:

@{
    Layout = "/Views/Shared/AdminLayout/_Layout.cshtml";
    ViewData["ThisOneWorks"] = "some value";
}
Run Code Online (Sandbox Code Playgroud)

现在的问题是,ViewDatas表示我从脚手架页面(例如设置SetPassword.cshtmlExtenalLogins.cshtml...)未在布局文件的工作。例如ViewData["Title"],始终为空,但是ViewData我在中设置的_ViewStart正在运行。

问题是,ViewData当我使用共享视图文件夹中的布局时,如何使用支架式身份文件?

编辑1:

似乎问题出在这一行:

ViewData["ThisOneWorks"] = "some value";
Run Code Online (Sandbox Code Playgroud)

当我从中删除它时_ViewStart,所有其他都ViewData可以正常工作,但是为什么呢?

itm*_*nus 6

好吧,我花了很多时间来重现相同的问题并进行调试。最后,我发现这是一个已知的错误。

  1. 在哪种情况下会发生错误?

如果您尝试呈现具有相关的网页_ViewStart.cshtml,如果你设置ViewDataViewStart的同时,_Layout.cshtml将不会向其呈现ViewData正确。

  1. 它之所以无法工作的原因。

总之,原因是该ViewData范围内的LayoutViewContext.ViewData,而不是this.ViewData你在你的页面设置。在这里查看详细说明

  1. 随便走走

该错误已修复2.2.0-preview1,很遗憾,没有计划对其进行修复2.1.x。如果您不想更新sdk,则可以使用HttpContext.ItemsItems在您的RazorPage中设置:

@{
    ViewData["Title"] = "Profile";                   // not working
    HttpContext.Items["Title"]="Workaround - Title"; // workaround
}
Run Code Online (Sandbox Code Playgroud)

Items在您的中呈现_Layout

<h1>@Context.Items["Title"]----render in layout</h1>
Run Code Online (Sandbox Code Playgroud)