asp.net-core - await _context 中的错误:“无法通过表达式引用类型”
问题描述
基于这个答案
我已经像这样编辑了我的 .cs:
private readonly GroupAccessDetailsModel _context;
public GroupAccessDetailsModel(GroupAccessDetailsModel context)
{
_context = context;
}
[BindProperty]
public IList<OutputAccessRights> UsersAccessRights { get; set; }
public async Task<IActionResult> OnGetAsync()
{
UsersAccessRights = await _context.OutputAccessRights.ToListAsync();
if (UsersAccessRights == null)
{
return NotFound();
}
return Page();
}
模型:
public class OutputAccessRights
{
public int Id { get; set; }
public bool ChkUserAccessRights { get; set; }
public string SubMenuDescription { get; set; }
public string MainMenuDescription { get; set; }
public bool ChkAddRight { get; set; }
}
但我的问题在于 await _context。输出访问权限 .ToListAsync ()。
错误:无法通过表达式引用类型。
我试过用 await _context.GroupAccessDetailsModel.OutputAccessRights.ToListAsync(); 替换它 但它没有用。知道如何解决这个问题吗?
解决方案
错误:无法通过表达式引用类型。
那是因为您使用模型而不是使用 DbContext。
您首先需要学习如何使用Entity Framework Core:
然后,您可以按照关于Razor Pages with Entity Framework Core的教程进行操作
方法中的以下代码OnGet
用于显示所有OutputAccessRights
数据。
UsersAccessRights = await _context.OutputAccessRights.ToListAsync();
上一个线程的问题是无法传递选择复选框列表。这意味着您可以显示数据,但无法将选择复选框传递给OnPost
。
我所做的Edit.cshtml.cs
是测试该OnPost
方法是否可以获取列表复选框。无需关心我如何设置方法,只需OutputAccessRights
在OnGet
方法上使用您之前的代码即可OnGet
。
以下是有关如何使用 EF Core 的完整代码:
1.DbContext(_context.OutputAccessRights
来自这里):
public class RazorContext : DbContext
{
public RazorContext (DbContextOptions<RazorContext> options)
: base(options)
{
}
public DbSet<OutputAccessRights> OutputAccessRights { get; set; }
}
2.appSettings.json(这里我使用visual studio中默认的sql server):
"ConnectionStrings": {
"ConnectionName": "Server=(localdb)\\mssqllocaldb;Database=DatabaseName;Trusted_Connection=True;MultipleActiveResultSets=true"
}
3.启动.cs:
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
services.AddDbContext<RazorContext>(options =>
options.UseSqlServer(Configuration.GetConnectionString("ConnectionName")));
}
4.在包 Nuget 管理器上运行命令行:
PM>add-migration init
PM>update-database
5.然后你可以设置数据:
public class EditModel : PageModel
{
private readonly RazorContext _context;
public EditModel(RazorContext context)
{
_context = context;
}
[BindProperty]
public IList<OutputAccessRights> UsersAccessRights { get; set; }
public async Task<IActionResult> OnGetAsync()
{
UsersAccessRights = await _context.OutputAccessRights.ToListAsync();//set the data to UsersAccessRights
return Page();
}
public async Task<IActionResult> OnPostAsync(IList<OutputAccessRights> usersAccessRights)
{
//do your stuff...
}
}
推荐阅读
- asp.net - 在 Asp.net MVC 5 应用程序中将 AngularJS 升级到 Angular 6
- java - 如何在 AlertDialog 中添加重新启动
- shell - 从 oracle 应用程序运行时访问 DB 目录文件夹的 Shell 脚本程序
- html - 仅在资源管理器中的 wordpress 网站上的 html 图像问题
- python - 如何使用 django-tables2 显示图像
- ios - 从 EventStore 检索日历事件返回 nil
- sql - 使用带有歧义连接的查找表的递归视图
- haskell - Monoidal Functor 是 Applicative 但 Applicative 定义中的 Monoid 类型类在哪里?
- javascript - .then 里面的 Promise.resolve 给我 undefined
- html - 我无法纠正的 w3validator 错误