C# ASP.Net Core 3.1 razor页面显示员工列表错误

C# ASP.Net Core 3.1 razor页面显示员工列表错误,c#,asp.net,asp.net-core,razor-pages,C#,Asp.net,Asp.net Core,Razor Pages,为了便于学习,我尝试将Blazor示例转换为ASP.Net Core Razor页面,但在Employees.cshtml页面和Employees.cshtml.cs中,我尝试调用数据时遇到了大量错误 我只是想在这个页面上显示数据,我不知道如何以及在哪里定义函数调用数据。我不使用WebAPI 我还试图找到与asp.net core 3.1相关的简单CRUD示例,以便了解流的工作原理,稍后我可以使用dapper等工具进行转换 我以前没有MVC或Core的经验 更新:我有几个已经解决的错误,但我运行

为了便于学习,我尝试将Blazor示例转换为ASP.Net Core Razor页面,但在Employees.cshtml页面和Employees.cshtml.cs中,我尝试调用数据时遇到了大量错误

我只是想在这个页面上显示数据,我不知道如何以及在哪里定义函数调用数据。我不使用WebAPI

我还试图找到与asp.net core 3.1相关的简单CRUD示例,以便了解流的工作原理,稍后我可以使用dapper等工具进行转换

我以前没有MVC或Core的经验

更新:我有几个已经解决的错误,但我运行时得到的唯一错误是programe.cs

public static void Main(string[] args)
{
    CreateHostBuilder(args).Build().Run();
}
错误消息

InvalidOperationException:验证服务时出错 描述符的服务类型:RazorCore31.Data.IEEmployeeService生存期: 作用域实现类型:RazorCore31.Data.EmployeeService”:无法 解析“RazorCore31.Data.SqlDbContext”类型的服务时 正在尝试激活“RazorCore31.Data.EmployeeService”

System.AggregateException:'某些服务无法启动 验证服务描述符时发生构造错误 '服务类型:RazorCore31.Data.IEEmployeeService生存期:作用域 实现类型:RazorCore31.Data.EmployeeService”:无法 解析“RazorCore31.Data.SqlDbContext”类型的服务时 正在尝试激活“RazorCore31.Data.EmployeeService”

EmployeeService.cs

Employees.cshtml

InvalidOperationException:验证服务时出错 描述符的服务类型:RazorCore31.Data.IEEmployeeService生存期: 作用域实现类型:RazorCore31.Data.EmployeeService”:无法 解析“RazorCore31.Data.SqlDbContext”类型的服务时 正在尝试激活“RazorCore31.Data.EmployeeService”

System.AggregateException:'某些服务无法启动 验证服务描述符时发生构造错误 '服务类型:RazorCore31.Data.IEEmployeeService生存期:作用域 实现类型:RazorCore31.Data.EmployeeService”:无法 解析“RazorCore31.Data.SqlDbContext”类型的服务时 正在尝试激活“RazorCore31.Data.EmployeeService”

错误消息基于@TanvirArjel解决方案解决此错误

按照以下方式编写您的员工模型:

public class EmployeesModel : PageModel
{
    private readonly IEmployeeService _employeeService;

    public EmployeesModel(IEmployeeService employeeService)
    {
        _employeeService = employeeService;
    }

    public List<Employee> EmployeeList; // <-- Here is the EmployeeList property

    public async Task OnGetAsync()
    {
        EmployeeList = await _employeeService.GetEmployees(); // <-- Populate EmployeeList here
    }
}
然后在视图中:

@page
@model RazorCore31.EmployeesModel
@using RazorCore31.Data
@using RazorCore31.Models
@using System.Collections.Generic
@{
    ViewData["Title"] = "Employees";
}

<h1>Employees list</h1>

<table class='table'>
    <thead>
        <tr>
            <th>EmpName"</th>
            <th>L["EmpDepartment"]</th>
            <th>L["EmpDesignation"]</th>
            <th>L["EmpCompany"]</th>
            <th>L["EmpCity"]</th>
        </tr>
    </thead>
    <tbody>
        @foreach (var employee in Model.EmployeeList) //<-- Here it is
        {
            <tr>
                <td>@employee.Name</td>
                <td>@employee.Department</td>
                <td>@employee.Designation</td>
                <td>@employee.Company</td>
                <td>@employee.City</td>
                <td>
                    <a href='/editemployee/@employee.Id'>Edit</a>
                    <a href='/deleteemployee/@employee.Id'>Delete</a>
                </td>
            </tr>
        }
    </tbody>
</table>

我在EmployeeList=\u employeeService.GetEmployees中得到错误信息;无法隐式转换类型…'System.Threading.Tasks.Task“到”System.Collections.Generic.List“@Learning OK!已获取,答案已更新。尝试查看员工页面InvalidOperationException时出现另一个错误:无法解析类型为“RazorCore31.Data.EmployeeService”的服务,同时尝试激活“RazorCore31.EmployeesModel”。Microsoft.Extensions.DependencyInjection.ActivatorUtilities.GetServiceIServiceProvider sp,类型,类型requiredBy,boolisDefaultParameterRequired@Learning请检查更新的答案。我已将EmployeeService替换为IEEmployeeService这会生成另一个错误EmployeeService\u EmployeeService=EmployeeService;。。。不能隐式转换类型
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using System.ComponentModel.DataAnnotations;
using RazorCore31.Data;

namespace RazorCore31.Models
{
    public class Employee 
    {

        [MaxLength(50)]
        public string Id { get; set; }

        [Required(ErrorMessage = "Name is RRRequired")]
        [StringLength(20, ErrorMessage = "Name is too long.")]
        public string Name { get; set; }

        [Required]
        [StringLength(20)]
        public string Department { get; set; }
        [MaxLength(100)]
        public string Designation { get; set; }
        [MaxLength(100)]
        public string Company { get; set; }
        [MaxLength(100)]
        public string City { get; set; }

    }
}
@page
@model RazorCore31.EmployeesModel
@using RazorCore31.Data
@using RazorCore31.Models
@using System.Collections.Generic
@{
    ViewData["Title"] = "Employees";
}

<h1>Employees list</h1>

<p>List of Employee</p>

@if (employees == null)
{
    <p>Loading page...</p>
}
else
{
    <table class='table'>
        <thead>
            <tr>
                <th>EmpName"</th>
                <th>L["EmpDepartment"]</th>
                <th>L["EmpDesignation"]</th>
                <th>L["EmpCompany"]</th>
                <th>L["EmpCity"]</th>
            </tr>
        </thead>
        <tbody>
            @foreach (var employee in employees)
            {
                <tr>
                    <td>@employee.Name</td>
                    <td>@employee.Department</td>
                    <td>@employee.Designation</td>
                    <td>@employee.Company</td>
                    <td>@employee.City</td>
                    <td>
                        <a href='/editemployee/@employee.Id'>Edit</a>
                        <a href='/deleteemployee/@employee.Id'>Delete</a>
                    </td>
                </tr>
            }
        </tbody>
    </table>
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.RazorPages;
using RazorCore31.Models;
using RazorCore31.Data;

namespace RazorCore31
{
    public class EmployeesModel : PageModel
    {
       //public  List<Employee> employees ;

        private List<Employee> _empList;

        public void empRepository()
        {
            //_empList = Data.EmployeeService.
        }
        public void OnGet()
        {

        }

        public Task getEmployeesAsync()
        {
            _empList = EmployeeService.GetEmployees();
           // return _empList;
        }

    }
}

Startup.cs

public void ConfigureServices(IServiceCollection services)
{
    services.AddDbContext<ApplicationDbContext>(options =>
        options.UseSqlServer(
            Configuration.GetConnectionString("DefaultConnection")));
    services.AddDefaultIdentity<IdentityUser>(options => options.SignIn.RequireConfirmedAccount = true)
        .AddEntityFrameworkStores<ApplicationDbContext>();
    services.AddRazorPages();

    services.AddScoped<IEmployeeService, EmployeeService>();
    ///services.AddSingleton<IEmployeeService, EmployeeService>();


}
public static void Main(string[] args)
{
    CreateHostBuilder(args).Build().Run();
} 
public class EmployeesModel : PageModel
{
    private readonly IEmployeeService _employeeService;

    public EmployeesModel(IEmployeeService employeeService)
    {
        _employeeService = employeeService;
    }

    public List<Employee> EmployeeList; // <-- Here is the EmployeeList property

    public async Task OnGetAsync()
    {
        EmployeeList = await _employeeService.GetEmployees(); // <-- Populate EmployeeList here
    }
}
@page
@model RazorCore31.EmployeesModel
@using RazorCore31.Data
@using RazorCore31.Models
@using System.Collections.Generic
@{
    ViewData["Title"] = "Employees";
}

<h1>Employees list</h1>

<table class='table'>
    <thead>
        <tr>
            <th>EmpName"</th>
            <th>L["EmpDepartment"]</th>
            <th>L["EmpDesignation"]</th>
            <th>L["EmpCompany"]</th>
            <th>L["EmpCity"]</th>
        </tr>
    </thead>
    <tbody>
        @foreach (var employee in Model.EmployeeList) //<-- Here it is
        {
            <tr>
                <td>@employee.Name</td>
                <td>@employee.Department</td>
                <td>@employee.Designation</td>
                <td>@employee.Company</td>
                <td>@employee.City</td>
                <td>
                    <a href='/editemployee/@employee.Id'>Edit</a>
                    <a href='/deleteemployee/@employee.Id'>Delete</a>
                </td>
            </tr>
        }
    </tbody>
</table>