@ WoIIe,
1. Цель использования лямбадного выражения в качестве значения для атрибута onclick состоит в том, чтобы вы могли передать значение в метод Delete. Если вы уже определили объект person в своем коде, вам не нужно использовать выражение lambada. Просто сделайте это: onclick = "@Delete"
и получите доступ к person.Id из метода Delete.
- Вы нажали кнопку второй раз? Я считаю, что этот код:
await this.PersonRepository.Delete(personId);
действительно выполнялся, но вы не видели ответа на GUI, потому что использование void, что не рекомендуется, требует от вас вызова StateHasChanged (); вручную перерисовать. Обратите внимание, что StateHasChanged () уже автоматически вызывался один раз, когда ваш метод «закончился», но, поскольку вы использовали void, а не task, вы должны вызвать StateHasChanged () еще раз, чтобы увидеть изменения. Но не делай этого. Смотрите ответ DavidG, как правильно кодировать.
Это также, как вы можете кодировать:
<button onclick="@Delete">Delete Me</button>
@functions {
Person person = new Person();
//....
async Task Delete()
{
await this.PersonRepository.Delete(person.Id);
}
}
Больше кода согласно запросу ...
foreach(var person in people)
{
<button onclick="@(async () => await Delete(person.Id))">Delete</button>
}
@functions {
// Get a list of People.
List<Person> People ;
protected override async Task OnParametersSetAsync()
{
People = await this.PersonRepository.getAll();
}
async Task Delete(Guid personId)
{
await this.PersonRepository.Delete(personId);
}
}
Примечание. Если проблемы все еще не решены, покажите весь код