Blazor NavigationManager Возврат "/?" - PullRequest
0 голосов
/ 26 мая 2020

Я использую Blazor для своего веб-проекта. Я изучаю этот фреймворк, но у меня проблема. Если я хочу go другую страницу, я могу сделать это:

<a href="DetailsPage" class="btn btn-primary">Details</a>

Теперь я создаю страницу входа (моя индексная страница и URL-адрес https://5000) и проверяю информация о пользователе. Я не могу авторизоваться. Если эта информация верна, пользователь переходит на домашнюю страницу, в противном случае пользователь остается на странице входа. Но когда я пробую правдивую информацию и нажимаю кнопку входа в систему, я go перехожу на домашнюю страницу (https://5000/homepage) и снова возвращаю страницу входа (https://5000/?). Когда я возвращаюсь на страницу входа, мой URL-адрес будет «https://5000/?». Почему я возвращаю свою страницу входа и вижу «?».

@page "/"
@using MyProject.Data
@using System.Net.Http
@inject HttpClient Http
@inject IMatToaster Toaster
@inject NavigationManager NavigationManager

<form>
    <div class="form-group">
        <label for="UserName">User Name</label>
        <input type="text" class="form-control" placeholder="User Name" @bind="@UserName">
    </div>
    <div class="form-group">
        <label for="UserPassword">User Password</label>
        <input type="password" class="form-control" placeholder="User Password" @bind="@UserPassword">
    </div>
    <button type="submit" class="btn btn-primary" @onclick="@Login">Log In</button>
</form>

@code {

    private User[] UserList;
    private User[] Control;

    public string UserName, UserPassword;

    protected override async Task OnInitializedAsync()
    {
        await getData();
    }

    protected async Task getData()
    {
        UserList = await Http.GetJsonAsync<User[]>("/api/Users/");
    }

    protected void Login()
    {
        if (String.IsNullOrEmpty(UserName) || String.IsNullOrEmpty(UserPassword))
        {
        }
        else
        {
            Control = UserList.Where(A => A.UserName.Equals(UserName, StringComparison.OrdinalIgnoreCase) && A.UserPassword == UserPassword).ToArray();
            if (Control.Length == 0)
            {   
            }
            else
            {
                NavigationManager.NavigateTo("/homepage");
            }
        }
    }
}

1 Ответ

1 голос
/ 26 мая 2020

Причина в том, что вы используете <button type="submit"></button> в элементе формы. Когда вы нажимаете кнопку, выполняется традиционная обратная отправка, и браузер пытается отправить данные формы на сервер. Конечно, это не ваше намерение. Вы хотите перемещаться только в пространстве вашего SPA-приложения, верно?

Чтобы разрешить это, установите для атрибута type значение «button», например:

<button type="button"></button>

Надеюсь, это поможет .. .

...