почему поля в loginModel остаются пустыми при нажатий на кнопку?
@using System.Text.Json.Serialization
@page "/login"
@inject HttpClient Http
@inject NavigationManager Navigation
<EditForm Model="@loginModel" OnValidSubmit="@HandleLogin" FormName="loginForm">
<DataAnnotationsValidator />
<ValidationSummary />
<div>
<label>Email:</label>
<InputText @bind-Value="loginModel.Email" />
</div>
<div>
<label>Пароль:</label>
<InputText @bind-Value="loginModel.Password" type="password" />
</div>
<button type="submit">Войти</button>
</EditForm>
@if (!string.IsNullOrEmpty(errorMessage))
{
<div class="alert alert-danger">@errorMessage</div>
}
@code {
private LoginModel loginModel = new LoginModel();
private string errorMessage;
private async Task HandleLogin()
{
errorMessage = string.Empty;
try
{
var response = await Http.PostAsJsonAsync("api/Auth/login", loginModel);
if (response.IsSuccessStatusCode)
{
var tokenResponse = await response.Content.ReadFromJsonAsync<TokenResponse>();
Navigation.NavigateTo("/");
}
else
{
errorMessage = "Ошибка входа. Проверьте правильность данных.";
}
}
catch (Exception ex)
{
errorMessage = $"Ошибка: {ex.Message}";
}
}
public class LoginModel
{
public LoginModel() { }
[JsonPropertyName("email")]
public string Email { get; set; } = string.Empty;
[JsonPropertyName("password")]
public string Password { get; set; } = string.Empty;
}
public class TokenResponse
{
public string Token { get; set; } = string.Empty;
}
}
Ответы (1 шт):
Автор решения: Dev18
→ Ссылка
Ваш пример кода в целом рабочий, с ним все нормально.
Единственное, вы забыли добавить @rendermode InteractiveServer
Из-за этого Blazor по умолчанию считает, что страница — статическая (в режиме SSR), и форма просто не умеет правильно передавать данные модели при нажатии кнопки. Поэтому loginModel оставался пустым.
@page "/"
@using System.Text.Json.Serialization
@inject HttpClient Http
@inject NavigationManager Navigation
@rendermode InteractiveServer
<EditForm Model="@loginModel" OnValidSubmit="@HandleLogin" FormName="loginForm">
<DataAnnotationsValidator />
<ValidationSummary />
<div>
<label>Email:</label>
<InputText @bind-Value="loginModel.Email" />
</div>
<div>
<label>Пароль:</label>
<InputText @bind-Value="loginModel.Password" type="password" />
</div>
<button type="submit">Войти</button>
</EditForm>
@if (!string.IsNullOrEmpty(errorMessage))
{
<div class="alert alert-danger">@errorMessage</div>
}
@code {
private LoginModel loginModel = new LoginModel();
private string errorMessage;
private async Task HandleLogin()
{
errorMessage = string.Empty;
try
{
var response = await Http.PostAsJsonAsync("api/Auth/login", loginModel);
if (response.IsSuccessStatusCode)
{
var tokenResponse = await response.Content.ReadFromJsonAsync<TokenResponse>();
Navigation.NavigateTo("/");
}
else
{
errorMessage = "Ошибка входа. Проверьте правильность данных.";
}
}
catch (Exception ex)
{
errorMessage = $"Ошибка: {ex.Message}";
}
}
public class LoginModel
{
public LoginModel() { }
[JsonPropertyName("email")]
public string Email { get; set; } = string.Empty;
[JsonPropertyName("password")]
public string Password { get; set; } = string.Empty;
}
public class TokenResponse
{
public string Token { get; set; } = string.Empty;
}
}
