«OnAfterRenderAsync серверного компонента Blazor не вызывается при рендеринге из _Layout.cshtmlC#

Место общения программистов C#
Ответить
Anonymous
 «OnAfterRenderAsync серверного компонента Blazor не вызывается при рендеринге из _Layout.cshtml

Сообщение Anonymous »

У меня есть серверный компонент Blazor, который отображается на моей странице _Layout.cshtml. Пока компонент визуализируется и вызывается OnInitializedAsync, OnAfterRenderAsync никогда не запускается. Это странно, потому что у меня есть еще один аналогичный компонент, в котором OnAfterRenderAsync работает корректно. Основная функциональная проблема заключается в том, что, хотя отображается это модальное окно согласия, имеющаяся у меня кнопка согласия, которая должна отклонять модальное окно, не работает и не вызывает метод HandleAgreeClick() в разделе кода бритвы при нажатии, несмотря на то, что на нее есть ссылка в кнопке ввода. Атрибут @onclick.
Вот мой рабочий компонент (упрощенно):

Код: Выделить всё

// SessionTimeout.razor
@inherits SessionTimeoutBase
@using Microsoft.AspNetCore.Mvc.TagHelpers;

Session Time Remaining:


// ... rest of component

@code {
protected override async Task OnAfterRenderAsync(bool firstRender)
{
if (firstRender)
{
module = await JSRuntime.InvokeAsync("import", "./Components/SessionTimeout.razor.js");
await module.InvokeVoidAsync("timer", OriginalTimeout, SessionWarning, TimeoutCount);
}
}
}
А вот мой проблемный компонент:

Код: Выделить всё

// ConsentModal.razor
@inherits ConsentModalBase
@namespace TCore.Components
@inject ILogger logger


Consent Agreement
[Your consent agreement text here]






@code {
protected override async Task OnAfterRenderAsync(bool firstRender)
{
logger.LogInformation("ConsentModal OnAfterRenderAsync attempting to run"); // Never gets hit
if (firstRender)
{
try
{
module = await JSRuntime.InvokeAsync("import", "./Components/ConsentModal.razor.js");
await module.InvokeVoidAsync("initializeConsent");
}
catch (Exception ex)
{
logger.LogError(ex, "Error in OnAfterRenderAsync");
}
}
}
}
Оба компонента отображаются в _Layout.cshtml с использованием схожего синтаксиса:

Код: Выделить всё

// Working SessionTimeout component



// Problematic ConsentModal component
@if (!isConsentAgreed && !isConsentPage && !isSessionLoggedOutPage && !isSessionExpiredPage && (hasEDIPI == null))
{



}
С помощью результатов отладки я проверил, что условие для отрисовки ConsentModal истинно и компонент отображается (видно в исходном коде страницы). OnInitializedAsync вызывается, но OnAfterRenderAsync никогда не запускается.
Что может помешать вызову OnAfterRenderAsync в компоненте ConsentModal, когда он работает нормально в SessionTimeout?

Подробнее здесь: https://stackoverflow.com/questions/793 ... ndered-fro
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»