C# 在_ViewStart.cshtml中定义全局变量

C# 在_ViewStart.cshtml中定义全局变量,c#,asp.net-core-mvc,C#,Asp.net Core Mvc,我们正在使用.NETCore3.1。我们希望在_ViewStart.cshtml中定义一个全局变量current user's email,以便所有其他视图都可以访问它。通过这样做,我们旨在避免重复代码 以下代码: @使用System.Security.Claims 您的电子邮件:@User.FindFirstValueMyClaimTypes.email 可以替换为以下内容: 您的电子邮件:@email 我尝试在_ViewStart.cshtml中定义电子邮件,如下所示: @{ 布局=\u我的

我们正在使用.NETCore3.1。我们希望在_ViewStart.cshtml中定义一个全局变量current user's email,以便所有其他视图都可以访问它。通过这样做,我们旨在避免重复代码

以下代码:

@使用System.Security.Claims 您的电子邮件:@User.FindFirstValueMyClaimTypes.email 可以替换为以下内容:

您的电子邮件:@email 我尝试在_ViewStart.cshtml中定义电子邮件,如下所示:

@{ 布局=\u我的布局; 字符串电子邮件=test@test.com; } 然后在Index.cshtml中访问它:

您的电子邮件:@email 但是上面说

“电子邮件”名称在当前上下文中不存在

如何从所有其他视图访问_ViewStart.cshtml中定义的变量?

在_ViewStart.cshtml中,您可以按如下方式注入变量:

@using MyApp.AspNetCore
@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers

@{ 
    string UserEmail = "test@test.com";
}
@inject string UserEmail;
在Index.cshtml中,您可以通过其名称引用它:

<span>Hello @UserEmail </span>
在_ViewImports.cshtml中,可以按如下方式注入变量:

@using MyApp.AspNetCore
@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers

@{ 
    string UserEmail = "test@test.com";
}
@inject string UserEmail;
在Index.cshtml中,您可以通过其名称引用它:

<span>Hello @UserEmail </span>

非常感谢。如果解决方案中有多个_ViewImports.cshtml文件,该怎么办?我们是否必须将此代码复制粘贴到每个应用程序中,或者是否有方法以某种方式将其提取到一个通用函数中?通常,每个应用程序不应该有多个_ViewImports.cshtml,可能只有在使用区域的情况下。但是,您不应该过分热衷于可重用代码。将其放入多个_ViewImports中仍然比放入每个Index.cshtml中要好。此外,就像您注入@injectstringuseremail一样,您可以注入帮助器类来减少重复,我们使用的是区域,每个区域都有自己的_ViewImports.cshtml。谢谢你对助手课程的建议。谢谢。如果解决方案中有多个_ViewImports.cshtml文件,该怎么办?我们是否必须将此代码复制粘贴到每个应用程序中,或者是否有方法以某种方式将其提取到一个通用函数中?通常,每个应用程序不应该有多个_ViewImports.cshtml,可能只有在使用区域的情况下。但是,您不应该过分热衷于可重用代码。将其放入多个_ViewImports中仍然比放入每个Index.cshtml中要好。此外,就像您注入@injectstringuseremail一样,您可以注入帮助器类来减少重复,我们使用的是区域,每个区域都有自己的_ViewImports.cshtml。谢谢你对助手课程的建议。