#asp.net-core #blazor #blazor-client-side #blazor-webassembly
#asp.net-core #blazor #blazor-на стороне клиента #blazor-webassembly
Вопрос:
Кто-нибудь знает, почему приведенное ниже не работает? Если я удаляю событие «onclick», оно компилируется и работает, как ожидалось. Является ли то, что нам не разрешено использовать событие в повторно используемых фрагментах рендеринга?
Env: ASP.NET Ядро 3.1 и веб-сборка Blazor
Заранее большое спасибо за помощь!
Не удается преобразовать лямбда-выражение в предполагаемый тип делегата, поскольку некоторые из возвращаемых типов в блоке неявно преобразуются в возвращаемый тип делегата
@code {
RenderFragment<(CategoryDto category, int myId)> rf =
val => __builder =>
{
<h1 @onclick="()=> Console.WriteLine(val.category.Name)">Hello @val.category.Name, @val.myId</h1>
};
}
Ответ №1:
Обработчик @onclick в вашем коде в конечном итоге будет создан EventCallbackFactory . Однако для этой фабрики требуется ссылка на «this», которая не поддерживается в инициализаторах полей — следовательно, вы получаете эту ошибку (и, вероятно, еще одну, касающуюся «this»).
Решение довольно простое. Вам просто нужно превратить поле в свойство следующим образом:
RenderFragment<(CategoryDto category, int myId)> rf => val => __builder =>
{
<h1 @onclick="() => Console.WriteLine(val.category.Name)">Hello @val.category.Name, @val.myId</h1>
};
Комментарии:
1. Это сработало. Вероятно, вы хотите исправить опечатку «rf ()» на «rf». Большое спасибо!
2. Обратите внимание, что теперь это не повторное использование логики рендеринга, потому что вы получаете новую логику каждый раз, когда используете ее. Вы не получаете дополнительной производительности.
3. @daniherrera Я полагаю, что вы могли бы переопределить OnInitialized(), а затем назначить RenderFragment там один раз.
4. Возможно, средство получения
5. @daniherrera разве я не могу сделать его статичным, чтобы он все время выдавал мне один и тот же экземпляр, и я все равно мог извлечь выгоду из производительности? (Пожалуйста, обратите внимание, что в статье, на которую я ссылался, содержится рекомендация сделать RenderFragment статическим для совместного использования на нескольких страницах). Спасибо!