InvalidOperationException: найдено несколько обработчиков. Следующие обработчики соответствовали данным маршрута и удовлетворяли всем ограничениям: - PullRequest
0 голосов
/ 05 июля 2018

System.Threading.Tasks.Task OnGetAsync (), Void OnGet ()

OnGetAsync(), Void OnGet() Я получаю эту ошибку при создании приложения для .NET Core 2.1 в Microsoft Visual Studio 2017. Я считаю, что в этом представлении содержится ошибка. Это для главной страницы бритвы index.cshtml.

public class IndexModel : PageModel
{
    private readonly AppDbContext _db;

    public IndexModel(AppDbContext db)
    {
        _db = db;
    }

    public IList<Customer> Customers { get; private set; }

    public async Task OnGetAsync()
    {
        Customers = await _db.Customers.AsNoTracking().ToListAsync();
    }

    public async Task<IActionResult> OnPostDeleteAsync(int id)
    {
        var contact = await _db.Customers.FindAsync(id);

        if (contact != null)
        {
            _db.Customers.Remove(contact);
            await _db.SaveChangesAsync();
        }

        return RedirectToPage();
    }

    public void OnGet()
    {

    }
}

1 Ответ

0 голосов
/ 05 июля 2018

Страницы бритвы перемещаются, используя основанные на соглашении обработчики.

Текущий PageModel имеет два обработчика Get Tasks.Task OnGetAsync() и Void OnGet(), как четко указано в исключении.

Фреймворк не может определить, какой использовать.

Удалите void OnGet, поскольку он, кажется, не используется.

Также было бы желательно пересмотреть наименование OnPostDeleteAsync, так как это также может вызвать проблемы с маршрутизацией.

Вы можете добавить методы-обработчики для любого HTTP-глагола. Самый распространенный обработчики:

  • OnGet для инициализации состояния, необходимого для страницы. OnGet образец.
  • OnPost для обработки отправленных форм.

Суффикс именования Async является необязательным, но часто используется в соответствии с соглашением. для асинхронных функций.

public class IndexModel : PageModel {
    private readonly AppDbContext _db;

    public IndexModel(AppDbContext db) {
        _db = db;
    }

    public IList<Customer> Customers { get; private set; }

    public async Task<IActionResult> OnGetAsync() {
        Customers = await _db.Customers.AsNoTracking().ToListAsync();
        return Page();
    }

    public async Task<IActionResult> OnPostAsync(int id) {
        var contact = await _db.Customers.FindAsync(id);

        if (contact != null) {
            _db.Customers.Remove(contact);
            await _db.SaveChangesAsync();
        }    
        return RedirectToPage("/Index");
    }   
}

Ссылка Введение в бритвенные страницы в ASP.NET Core

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...