Ошибка в await _context: «не может ссылаться на тип через выражение» - PullRequest
0 голосов
/ 05 февраля 2020

На основании этого ответа

Я редактировал свои .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; }
}

Но моя проблема в ожидании _context. OutputAccessRights .ToListAsyn c ().

Ошибка: не может ссылаться на тип через выражение .

Я пытался заменить его на await _context.GroupAccessDetailsModel.OutputAccessRights.ToListAsyn c (); но это не сработало. Любая идея, как я могу решить эту проблему?

1 Ответ

0 голосов
/ 05 февраля 2020

Ошибка: невозможно ссылаться на тип через выражение.

Это потому, что вы используете модель вместо DbContext.

Сначала необходимо научиться используйте Entity Framework Core :

Тогда вы можете следовать учебнику о Razor Pages с Entity Framework Core

Следующий код в методе OnGet используется для отображения всех данных OutputAccessRights.

UsersAccessRights = await _context.OutputAccessRights.ToListAsync();

Проблема предыдущего потока не может пройти список флажков выбора. Это означает, что вы можете отобразить данные, но не можете передать флажок выбора OnPost.

То, что я сделал для Edit.cshtml.cs, - это проверка метода OnPost, может ли он получить флажок списка или нет. Не нужно заботиться о том, как установить OutputAccessRights на OnGet method, просто используйте свой предыдущий код для OnGet method.

Вот весь код о том, как использовать 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 (здесь я использую сервер sql по умолчанию в vi sual studio):

"ConnectionStrings": {
   "ConnectionName": "Server=(localdb)\\mssqllocaldb;Database=DatabaseName;Trusted_Connection=True;MultipleActiveResultSets=true"
 }

3.Startup.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...
    }
}
...