#c# #razor #blazor #razor-pages #blazor-server-side
#c# #razor #blazor #razor-страницы #blazor-на стороне сервера
Вопрос:
У меня есть следующий код в серверном приложении Blazor:
<div class="table-responsive">
<table class="table">
<thead>
<tr>
<th>Email</th>
<th>Name</th>
</tr>
</thead>
<tbody>
@foreach (var applicationUser in ApplicationUsers)
{
string userId = applicationUser.Id;
Guid? personId = applicationUser.PersonId;
<tr>
<td>@applicationUser.Email</td>
<td>@applicationUser.PersonName</td>
@if (personId != null)
{
<td>
<button class="btn btn-block btn-primary" @onclick="() => ShowEditPersonDialog(personId)" style="color: rgb(255, 255, 255); background-color: rgb(49, 56, 215);" @type="button">Edit Person</button>
</td>
}
</tr>
}
</tbody>
</table>
</div>
Однако это:
@onclick="() => ShowEditPersonDialog(personId)"
…не работает. Поскольку это указано выше, компонент загружается до первой кнопки в первой строке (есть 4 пользователя — должны загружаться 4 строки), тогда кнопка не отображается должным образом и выдается необработанное исключение:
Я пробовал:
@onclick="() => ShowEditPersonDialog(personId)"
— исключение, показанное выше@onclick="(e) => ShowEditPersonDialog(e, personId)"
— исключение, показанное выше@onclick="e => ShowEditPersonDialog(e, personId)"
— исключение, показанное выше@onclick="@(e => ShowEditPersonDialog(e, personId))"
— исключение, показанное выше@onclick="(e) => ShowEditPersonDialog(e)"
— исключение, показанное выше@onclick="e => ShowEditPersonDialog(e)"
— исключение, показанное выше@onclick="@(e => ShowEditPersonDialog(e))"
— исключение, показанное выше@onclick="() => ShowEditPersonDialog()"
— исключение, показанное выше@onclick=@"() => ShowEditPersonDialog(personId)"
— не компилируется, синтаксические ошибки@onclick="@(() => ShowEditPersonDialog(personId))"
— исключение, показанное вышеonclick="() => ShowEditPersonDialog(personId)"
— компилируется, запускается и визуализируется, но кнопка не отвечаетonclick="@(() => ShowEditPersonDialog(personId))"
— не компилируется — Не удается преобразовать лямбда-выражение в тип ‘object’, потому что это не тип делегатаonclick="(e) => ShowEditPersonDialog(e, personId)"
— компилируется, запускается и визуализируется, но кнопка не отвечаетonclick="e => ShowEditPersonDialog(e, personId)"
— компилируется, запускается и визуализируется, но кнопка не отвечаетonclick="@((e) => ShowEditPersonDialog(e, personId))"
— не компилируется — Не удается преобразовать лямбда-выражение в тип ‘object’, потому что это не тип делегатаonclick="@(e => ShowEditPersonDialog(e, personId))"
— не компилируется — Не удается преобразовать лямбда-выражение в тип ‘object’, потому что это не тип делегатаonclick="@(e => ShowEditPersonDialog(e))"
— не компилируется — Не удается преобразовать лямбда-выражение в тип ‘object’, потому что это не тип делегата
Как, черт возьми, мне написать эту вещь?? Я просто хочу, чтобы кнопка передавала соответствующий PersonID для данной строки в метод ShowEditPersonDialog.
Комментарии:
1.
@onclick="() => ShowEditPersonDialog(personId)"
2. @Eliseo это приводит к исключению, показанному в вопросе
Ответ №1:
Измените свою кнопку на эту — удалите @
из type="button"
и используйте @onclick="@(() => ShowEditPersonDialog(personId))"
<button class="btn btn-block btn-primary"
@onclick="@(() => ShowEditPersonDialog(personId))"
style="color: rgb(255, 255, 255); background-color: rgb(49, 56, 215);"
type="button">Edit Person</button>
Также полезно переместить встроенные CSS-стили кнопок в класс в файле css, чтобы HTML-разметка была понятнее для чтения 🙂
Комментарии:
1. Я думаю, что
@
в"@(()=>...."
нет необходимости2. Нет, @Eliseo это не так. Подумайте об этом:
@()
— это пустое выражение. Таким образом, Blazor не сможет анализировать дальше,@()
если это@() =>
так. Отсюда второй набор ()3. Ссылка: learn.microsoft.com/en-us/aspnet/core/blazor/components /…
4. Это исправлено! Спасибо, я понятия не имел о том, что @type =»button» является проблемой, я просто следил за тем, что делали другие. В какой-то момент все решение будет очищено, я просто сосредоточен на том, чтобы сначала заставить его работать.
5. @Quango, я просто проверяю
@onclick="() => ShowEditPersonDialog(personId)"
или@onclick="(() => ShowEditPersonDialog(personId))"
, и оба работают для меня — в очень простом приложении WSAM-