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.cshtml,ExtenalLogins.cshtml...)未在布局文件的工作。例如ViewData["Title"],始终为空,但是ViewData我在中设置的_ViewStart正在运行。
问题是,ViewData当我使用共享视图文件夹中的布局时,如何使用支架式身份文件?
编辑1:
似乎问题出在这一行:
ViewData["ThisOneWorks"] = "some value";
Run Code Online (Sandbox Code Playgroud)
当我从中删除它时_ViewStart,所有其他都ViewData可以正常工作,但是为什么呢?
好吧,我花了很多时间来重现相同的问题并进行调试。最后,我发现这是一个已知的错误。
如果您尝试呈现具有相关的网页_ViewStart.cshtml,如果你设置ViewData内ViewStart的同时,_Layout.cshtml将不会向其呈现ViewData正确。
总之,原因是该ViewData范围内的Layout是ViewContext.ViewData,而不是this.ViewData你在你的页面设置。在这里查看详细说明
该错误已修复2.2.0-preview1,很遗憾,没有计划对其进行修复2.1.x。如果您不想更新sdk,则可以使用HttpContext.Items。Items在您的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)
| 归档时间: |
|
| 查看次数: |
1910 次 |
| 最近记录: |