@inject ILocalStorageService LocalStorageService @inject IJSRuntime Js 관리자 로그인
@code { private string rememberedUsername = ""; private bool isRememberChecked = false; private bool isReady; private const string RememberedUsernameKey = "admin-remembered-username"; private const string RememberedCheckboxKey = "admin-remember-checkbox"; protected override async Task OnInitializedAsync() { try { rememberedUsername = await LocalStorageService.GetItemAsStringAsync(RememberedUsernameKey) ?? ""; var checkboxValue = await LocalStorageService.GetItemAsStringAsync(RememberedCheckboxKey) ?? "false"; isRememberChecked = checkboxValue == "true" && !string.IsNullOrEmpty(rememberedUsername); } catch { rememberedUsername = ""; isRememberChecked = false; } } protected override async Task OnAfterRenderAsync(bool firstRender) { if (firstRender) { try { await Js.InvokeVoidAsync("taxbaikAdminSession.syncRouteClass"); await Js.InvokeVoidAsync("taxbaikAdminSession.bindLoginForm"); } catch { // Login UI must remain visible even if JS binding fails. } finally { // Blazor owns this render from here on, so drive "disabled" from // C# state rather than a raw DOM mutation - otherwise this hydration // pass re-asserts the prerendered markup's static "disabled" and // silently undoes whatever the early inline