Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从.net core中的layout.cshtml访问数据库_C#_.net_Asp.net Core - Fatal编程技术网

C# 从.net core中的layout.cshtml访问数据库

C# 从.net core中的layout.cshtml访问数据库,c#,.net,asp.net-core,C#,.net,Asp.net Core,我的模型中有一组用户,如下所示: [Key] [Required] public int ID { get; set; } [ForeignKey("Employee")] public int? EmployeeID { get; set; } public int? CompanyID { get; set; } public string UserID { get; set; }

我的模型中有一组用户,如下所示:

[Key]
        [Required]
        public int ID { get; set; }

        [ForeignKey("Employee")]
        public int? EmployeeID  { get; set; }

        public int? CompanyID { get; set; }

        public string UserID { get; set; }

        [DataType(DataType.Text)]
        public string Firstname { get; set; }

        [DataType(DataType.Text)]
        public string Middlenames { get; set; }

        [DataType(DataType.Text)]
        public string Lastname { get; set; }

        [DataType(DataType.Text)]
        public string Address { get; set; }

        [DataType(DataType.Text)]
        public string Postnumber { get; set; }

        [DataType(DataType.Text)]
        public string City { get; set; }

        [DataType(DataType.Text)]
        public string Phone { get; set; }

        [DataType(DataType.EmailAddress)]
        [Required]
        public string Email { get; set; }

        [DataType(DataType.DateTime)]
        public DateTime CreatedDate { get; set; }

        [DataType(DataType.DateTime)]
        public DateTime EditedDate { get; set; }

        [DataType(DataType.DateTime)]
        public DateTime CurrentLoginTime { get; set; }

        [DataType(DataType.DateTime)]
        public DateTime LastLoginTime { get; set; }

        public virtual Employee Employee { get; set; }

        public virtual Company Company { get; set; }
using Microsoft.AspNetCore.Identity;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;

namespace TimePlus.Data
{
    public class ApplicationUser : IdentityUser
    {
        public string Fullname { get; set; }
        public int? CompanyID { get; set; }
        public int? EmployeeID { get; set; }
    }
}
我想做的是根据companyID是否有值在布局文件中显示一个菜单项

在MVC5中,我可以在瞬间完成这项工作,但在.NETCore中,我不知道如何继续或搜索什么


我希望这里的人能告诉我,这是如何工作的,我应该如何做:-)

您可以创建一个
视图包。IsCompanyOwnerMenuVisible
并将您的逻辑分配给它:

控制器: 然后在您的视图中:

视图: 或者您可以直接在内部视图中进行检查:

@if(Model.CompanyID.HasValue)
{
    //Your menu code here
}

您可以创建一个
ViewBag.IsCompanyOwnerMenuVisible
,并将您的逻辑分配给它:

控制器: 然后在您的视图中:

视图: 或者您可以直接在内部视图中进行检查:

@if(Model.CompanyID.HasValue)
{
    //Your menu code here
}

您可以在这里创建一些服务(并将其注册到DI容器中),这些服务可以帮助您了解您的情况。然后,您可以将该服务注入到视图中,并对其调用一个方法来检查值:

@inject MyUserService myUserService
@if (await myUserService.GetIsCompanyOwnerAsync(User))
{
    <div>Item for company owner</div>
}

您可以在这里创建一些服务(并将其注册到DI容器中),这些服务可以帮助您了解您的情况。然后,您可以将该服务注入到视图中,并对其调用一个方法来检查值:

@inject MyUserService myUserService
@if (await myUserService.GetIsCompanyOwnerAsync(User))
{
    <div>Item for company owner</div>
}

我最终创建了一个ApplicationUser类,它继承了IdentityUser。然后,我可以将IdentityUser在项目中弹出的所有位置更改为ApplicationUser

然后,我在applicationUser中添加了所需的属性,使用Add migration添加了迁移,并更新了数据库

我的ApplicationUser类如下所示:

[Key]
        [Required]
        public int ID { get; set; }

        [ForeignKey("Employee")]
        public int? EmployeeID  { get; set; }

        public int? CompanyID { get; set; }

        public string UserID { get; set; }

        [DataType(DataType.Text)]
        public string Firstname { get; set; }

        [DataType(DataType.Text)]
        public string Middlenames { get; set; }

        [DataType(DataType.Text)]
        public string Lastname { get; set; }

        [DataType(DataType.Text)]
        public string Address { get; set; }

        [DataType(DataType.Text)]
        public string Postnumber { get; set; }

        [DataType(DataType.Text)]
        public string City { get; set; }

        [DataType(DataType.Text)]
        public string Phone { get; set; }

        [DataType(DataType.EmailAddress)]
        [Required]
        public string Email { get; set; }

        [DataType(DataType.DateTime)]
        public DateTime CreatedDate { get; set; }

        [DataType(DataType.DateTime)]
        public DateTime EditedDate { get; set; }

        [DataType(DataType.DateTime)]
        public DateTime CurrentLoginTime { get; set; }

        [DataType(DataType.DateTime)]
        public DateTime LastLoginTime { get; set; }

        public virtual Employee Employee { get; set; }

        public virtual Company Company { get; set; }
using Microsoft.AspNetCore.Identity;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;

namespace TimePlus.Data
{
    public class ApplicationUser : IdentityUser
    {
        public string Fullname { get; set; }
        public int? CompanyID { get; set; }
        public int? EmployeeID { get; set; }
    }
}
在我的布局中,我可以调用以下属性:

<li>
   <a asp-area="Identity" asp-page="/Account/Manage/Index" title="Manage">
           Hello @user.Fullname
   </a>
</li>
  • 希望这能帮助其他人:-)
    我在“poke”的回答上做了标记,因为这是他指向让我在谷歌上搜索的主张的指针;-)

    我最终创建了一个ApplicationUser类,该类继承自IdentityUser。然后,我可以将IdentityUser在项目中弹出的所有位置更改为ApplicationUser

    然后,我在applicationUser中添加了所需的属性,使用Add migration添加了迁移,并更新了数据库

    我的ApplicationUser类如下所示:

    [Key]
            [Required]
            public int ID { get; set; }
    
            [ForeignKey("Employee")]
            public int? EmployeeID  { get; set; }
    
            public int? CompanyID { get; set; }
    
            public string UserID { get; set; }
    
            [DataType(DataType.Text)]
            public string Firstname { get; set; }
    
            [DataType(DataType.Text)]
            public string Middlenames { get; set; }
    
            [DataType(DataType.Text)]
            public string Lastname { get; set; }
    
            [DataType(DataType.Text)]
            public string Address { get; set; }
    
            [DataType(DataType.Text)]
            public string Postnumber { get; set; }
    
            [DataType(DataType.Text)]
            public string City { get; set; }
    
            [DataType(DataType.Text)]
            public string Phone { get; set; }
    
            [DataType(DataType.EmailAddress)]
            [Required]
            public string Email { get; set; }
    
            [DataType(DataType.DateTime)]
            public DateTime CreatedDate { get; set; }
    
            [DataType(DataType.DateTime)]
            public DateTime EditedDate { get; set; }
    
            [DataType(DataType.DateTime)]
            public DateTime CurrentLoginTime { get; set; }
    
            [DataType(DataType.DateTime)]
            public DateTime LastLoginTime { get; set; }
    
            public virtual Employee Employee { get; set; }
    
            public virtual Company Company { get; set; }
    
    using Microsoft.AspNetCore.Identity;
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Threading.Tasks;
    
    namespace TimePlus.Data
    {
        public class ApplicationUser : IdentityUser
        {
            public string Fullname { get; set; }
            public int? CompanyID { get; set; }
            public int? EmployeeID { get; set; }
        }
    }
    
    在我的布局中,我可以调用以下属性:

    <li>
       <a asp-area="Identity" asp-page="/Account/Manage/Index" title="Manage">
               Hello @user.Fullname
       </a>
    </li>
    
  • 希望这能帮助其他人:-)

    我在“poke”的回答上做了标记,因为这是他指向让我在谷歌上搜索的主张的指针;-)

    什么是
    IsCompanyOwner
    ?它不是用户对象的属性。@model user和@if(model.IsCompanyOwner){}。这与asp MVCAre相同,您询问如何在
    layout.cshtml
    (坏主意)中执行控制器的工作,或者如何访问其中的模型?为什么布局文件需要了解特定控制器的模型?这是控制器视图的工作,或者是我也看不到的Razor页面。但也许你在文件顶部有一个
    @injectusermanager-UserManager
    帮助。我编辑了这篇文章,因为“IsCompanyOwner”是另一个模型的一部分。如果在UserInfo模型中为当前登录的用户设置了Companyid,则我要做的是根据隐藏或显示菜单项;-)什么是
    IsCompanyOwner
    ?它不是用户对象的属性。@model user和@if(model.IsCompanyOwner){}。这与asp MVCAre相同,您询问如何在
    layout.cshtml
    (坏主意)中执行控制器的工作,或者如何访问其中的模型?为什么布局文件需要了解特定控制器的模型?这是控制器视图的工作,或者是我也看不到的Razor页面。但也许你在文件顶部有一个
    @injectusermanager-UserManager
    帮助。我编辑了这篇文章,因为“IsCompanyOwner”是另一个模型的一部分。如果在UserInfo模型中为当前登录的用户设置了Companyid,则我要做的是根据隐藏或显示菜单项;-)然后,我必须在每个使用该布局的控制器中设置该viewbag?还是有更聪明的方法?(可能是我不了解核心是如何工作的;-))你的共享模型是你的视图模型吗?检查更新的答案。我不确定如何将模型传递到layout.cshtml?无法从布局视图访问控制器中的Viewbag和viewdata。它们只返回null,这可能是因为在创建viewbag之前布局呈现。在这种情况下,您可以创建基本控制器,并从基本控制器派生所有公共控制器,然后在该控制器内可以重写
    OnActionExecuting
    方法,在你的控制器中,我需要在每个使用该布局的控制器中设置该视图包?还是有更聪明的方法?(可能是我不了解核心是如何工作的;-))你的共享模型是你的视图模型吗?检查更新的答案。我不确定如何将模型传递到layout.cshtml?无法从布局视图访问控制器中的Viewbag和viewdata。它们只返回null,这可能是因为在创建viewbag之前布局呈现。在这种情况下,您可以创建基本控制器,并从基本控制器派生所有公共控制器,然后在该控制器内可以重写
    OnActionExecuting
    方法,或者在控制器内部重写执行的操作。我最终创建了一个从IdentityUser继承的applicationUser模型,然后添加了我需要的属性:-)我最终创建了一个从IdentityUser继承的applicationUser模型,然后添加了我需要的属性:-)