Как переместить форму входа на панель навигации - PullRequest
0 голосов
/ 16 апреля 2019

В настоящее время я имею дело с проблемой, которую я пытался решить с помощью «учиться на собственном опыте», но я почти не стою на грани того, чтобы оставить его в покое, и пусть он работает так, как я знаю, он работает.

Как это работает сейчас: В настоящее время я свернул всю область идентификации с asp.net, вход и регистрация выполняются в отдельных представлениях

так, как я хочу: Логин должен быть размещен на панели навигации, но для этого мне нужна модель, чтобы вставить имя пользователя и пароль.Если я использую модель в _LoginPartial, регистрация не работает.В настоящее время я могу переместить форму входа на панель навигации и войти / выйти из системы, как обычно, используя форму, но тогда мне больше не разрешается регистрироваться, так как она требует модель входа для моей страницы регистрации.

Я могу добавить другой кодесли нужно, но они являются более или менее стандартными свернутыми классами.

Picture Illustration

_LoginPartial

@inject SignInManager<User> SignInManager
@inject UserManager<User> UserManager
@using Microsoft.AspNetCore.Identity
@using TVScreenViewer.Models.Identity
@model TVScreenViewer.Areas.Identity.Pages.Account.LoginModel

@if (SignInManager.IsSignedIn(User))
{
    <form asp-area="Identity" asp-page="/Account/Logout" asp-route-returnUrl="@Url.Action("Index", "Home", new {area = ""})" method="post" id="logoutForm" class="navbar-nav navbar-right">
        <ul class="navbar-nav navbar-right">
            <li class="nav-item">
                <a class="nav-link" asp-area="Identity" asp-page="/Account/Manage/Index" title="Manage">Hello @UserManager.GetUserAsync(User).Result.Name!</a>
            </li>
            <li class="nav-item dropdown">
                <a class="nav-link dropdown-toggle" href="#" id="navbarDropdown1" role="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
                    Menu
                </a>
                <div class="dropdown-menu" aria-labelledby="navbarDropdown1">
                    <a class="dropdown-item" href="#">Settings</a>
                    <div class="dropdown-divider"></div>
                    <button type="submit" class="btn btn-secondary btn-block" style="padding: 4px 24px; text-align: left;">Logout</button>
                </div>
            </li>
        </ul>
    </form>
}
else
{
    <form asp-area="Identity" asp-page="/Account/Login" method="post" class="navbar-nav navbar-right">
        <div asp-validation-summary="All" class="text-danger"></div>
        <div class="row">
            <div style="margin: 0rem 1rem">
                <input class="form-control form-control-sm" asp-for="Input.Username"/>
                <span asp-validation-for="Input.Username" class="text-danger"></span>
            </div>
            <div>
                <input class="form-control form-control-sm" asp-for="Input.Password"/>
                <span asp-validation-for="Input.Password" class="text-danger"></span>
            </div>
            <div style="margin: 0rem 1rem">
                <button type="submit" class="btn btn-primary btn-sm">Log in</button>
            </div>
        </div>
    </form>

    @*<a asp-area="Identity" asp-page="/Account/Login">Login</a>*@
    <a asp-area="Identity" asp-page="/Account/Register">Register</a>
}

@section Scripts {
    <partial name="_ValidationScriptsPartial"/>
}

1 Ответ

0 голосов
/ 16 апреля 2019

Поиск пользовательского интерфейса:

Вот пример в начальной загрузке 3, который является формой входа в систему по мере необходимости: https://getbootstrap.com/docs/3.4/examples/jumbotron/

и еще один в v4, который представляет собой строку поиска: https://getbootstrap.com/docs/4.3/examples/sticky-footer-navbar/

Вы можете проверить элемент: enter image description here

и скопировать эту часть (в зависимости от версии она может отличаться enter image description here

Кодирование (фактическая проблема)

Само по себе имя входа не является чем-то особенным, вы можете использовать старую HTML-форму или MVC beginForm и установить действие для отправки данных на страницу учетной записи ... проверка подлинности выполняется через сервер,и сервер назначает файлы cookie, так что это не имеет значения, пока вы отправляете данные на сервер, и вам нужно два ввода в зависимости от вашей модели, это могут быть Имя пользователя и Пароль,

Также эти: asp-pageи asp-for ... являются новыми для меня, я не помню, чтобы их где-то видел, убедитесь, что вы используете либо @Html.TextBoxFor(m => m.Email, new { @class = "form-control" }) вид поддерживаемого rezor поля, либо <input name=""> ввод html с атрибутом name

Также вот стандартная форма от Microsoft на .NetBased MVC:

@using (Html.BeginForm("Login", "Account", new { ReturnUrl = ViewBag.ReturnUrl }, FormMethod.Post, new { @class = "form-horizontal", role = "form" }))

Код Microsoft по умолчанию для входа в систему

Примечание Я заметил, что вы используете Core MVC из-за этой строки @using Microsoft.AspNetCore.Identity, шаблон которой может отличаться от шаблона .netframwork, но концепция должна бытьто же самое

@using OpenAndDelete.Models
@model LoginViewModel
@{
    ViewBag.Title = "Log in";
}

<h2>@ViewBag.Title.</h2>
<div class="row">
    <div class="col-md-8">
        <section id="loginForm">
            @using (Html.BeginForm("Login", "Account", new { ReturnUrl = ViewBag.ReturnUrl }, FormMethod.Post, new { @class = "form-horizontal", role = "form" }))
            {
                @Html.AntiForgeryToken()
                <h4>Use a local account to log in.</h4>
                <hr />
                @Html.ValidationSummary(true, "", new { @class = "text-danger" })
                <div class="form-group">
                    @Html.LabelFor(m => m.Email, new { @class = "col-md-2 control-label" })
                    <div class="col-md-10">
                        @Html.TextBoxFor(m => m.Email, new { @class = "form-control" })
                        @Html.ValidationMessageFor(m => m.Email, "", new { @class = "text-danger" })
                    </div>
                </div>
                <div class="form-group">
                    @Html.LabelFor(m => m.Password, new { @class = "col-md-2 control-label" })
                    <div class="col-md-10">
                        @Html.PasswordFor(m => m.Password, new { @class = "form-control" })
                        @Html.ValidationMessageFor(m => m.Password, "", new { @class = "text-danger" })
                    </div>
                </div>
                <div class="form-group">
                    <div class="col-md-offset-2 col-md-10">
                        <div class="checkbox">
                            @Html.CheckBoxFor(m => m.RememberMe)
                            @Html.LabelFor(m => m.RememberMe)
                        </div>
                    </div>
                </div>
                <div class="form-group">
                    <div class="col-md-offset-2 col-md-10">
                        <input type="submit" value="Log in" class="btn btn-default" />
                    </div>
                </div>
                <p>
                    @Html.ActionLink("Register as a new user", "Register")
                </p>
                @* Enable this once you have account confirmation enabled for password reset functionality
                    <p>
                        @Html.ActionLink("Forgot your password?", "ForgotPassword")
                    </p>*@
            }
        </section>
    </div>
    <div class="col-md-4">
        <section id="socialLoginForm">
            @Html.Partial("_ExternalLoginsListPartial", new ExternalLoginListViewModel { ReturnUrl = ViewBag.ReturnUrl })
        </section>
    </div>
</div>

@section Scripts {
    @Scripts.Render("~/bundles/jqueryval")
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...