Blazor:在子组件中登录成功后关闭 MatBlazor 弹出对话框
Blazor: Close MatBlazor PopUp Dialog box after Login success in Child Component
我有一个 Login.razor 发生所有操作的页面。
@page "/login"
@inject IAuthService AuthService
@inject NavigationManager NavigationManager
@if (ShowErrors)
{
<div class="alert alert-danger" role="alert">
<p>@Error</p>
</div>
}
<div class="card">
<div class="card-body">
<EditForm Model="loginModel" OnValidSubmit="HandleLogin">
<DataAnnotationsValidator />
<ValidationSummary />
<div class="form-group">
<label for="email">Email address</label>
<InputText Id="email" Class="form-control" @bind-Value="loginModel.Email" />
<ValidationMessage For="@(() => loginModel.Email)" />
</div>
<div class="form-group">
<label for="password">Password</label>
<InputText Id="password" type="password" Class="form-control" @bind-Value="loginModel.Password" />
<ValidationMessage For="@(() => loginModel.Password)" />
</div>
<button type="submit" class="btn btn-primary">Submit</button>
</EditForm>
</div>
</div>
@code {
private LoginModel loginModel = new LoginModel();
private bool ShowErrors;
private string Error = "";
private async Task HandleLogin()
{
ShowErrors = false;
var result = await AuthService.Login(loginModel);
if (result.Successful)
{
NavigationManager.NavigateTo("/");
}
else
{
Error = result.Error;
ShowErrors = true;
}
}
}
我的 MainLayout.razor 包含 Matblazor 对话框弹出窗口。
<MatDialog @bind-IsOpen="@signInOpen">
<MatTabGroup>
<MatTab Label="SIGN IN">
<BlazorCom.Client.Pages.Login />
</MatTab>
</MatTabGroup>
</MatDialog>
@code
{
public bool signInOpen = false;
void OpenDialog()
{
signInOpen = true;
}
}
当我使用此对话框登录时,该对话框不会自行关闭,因为我不知道该怎么做。
现在我想在成功登录后关闭弹出对话框。
有人可以帮我吗?
将 signInOpen
设置为 false,对话框将关闭。
编辑:如果您需要从外部设置它,请添加一个关闭方法,如下所示:
@code {
public void CloseDialog() {
signInOpen=false;
StateHasChanged();
}
然后Login.razor可以在提交按钮的@onclick事件中调用CloseDialog()函数
我有一个 Login.razor 发生所有操作的页面。
@page "/login"
@inject IAuthService AuthService
@inject NavigationManager NavigationManager
@if (ShowErrors)
{
<div class="alert alert-danger" role="alert">
<p>@Error</p>
</div>
}
<div class="card">
<div class="card-body">
<EditForm Model="loginModel" OnValidSubmit="HandleLogin">
<DataAnnotationsValidator />
<ValidationSummary />
<div class="form-group">
<label for="email">Email address</label>
<InputText Id="email" Class="form-control" @bind-Value="loginModel.Email" />
<ValidationMessage For="@(() => loginModel.Email)" />
</div>
<div class="form-group">
<label for="password">Password</label>
<InputText Id="password" type="password" Class="form-control" @bind-Value="loginModel.Password" />
<ValidationMessage For="@(() => loginModel.Password)" />
</div>
<button type="submit" class="btn btn-primary">Submit</button>
</EditForm>
</div>
</div>
@code {
private LoginModel loginModel = new LoginModel();
private bool ShowErrors;
private string Error = "";
private async Task HandleLogin()
{
ShowErrors = false;
var result = await AuthService.Login(loginModel);
if (result.Successful)
{
NavigationManager.NavigateTo("/");
}
else
{
Error = result.Error;
ShowErrors = true;
}
}
}
我的 MainLayout.razor 包含 Matblazor 对话框弹出窗口。
<MatDialog @bind-IsOpen="@signInOpen">
<MatTabGroup>
<MatTab Label="SIGN IN">
<BlazorCom.Client.Pages.Login />
</MatTab>
</MatTabGroup>
</MatDialog>
@code
{
public bool signInOpen = false;
void OpenDialog()
{
signInOpen = true;
}
}
当我使用此对话框登录时,该对话框不会自行关闭,因为我不知道该怎么做。 现在我想在成功登录后关闭弹出对话框。 有人可以帮我吗?
将 signInOpen
设置为 false,对话框将关闭。
编辑:如果您需要从外部设置它,请添加一个关闭方法,如下所示:
@code {
public void CloseDialog() {
signInOpen=false;
StateHasChanged();
}
然后Login.razor可以在提交按钮的@onclick事件中调用CloseDialog()函数