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