Как переместить форму входа в панель навигации

#c# #asp.net #.net #model-view-controller

#c# #asp.net #.net #модель-представление-контроллер

Вопрос:

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

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

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

При необходимости я могу добавить другой код, но они являются более или менее стандартными классами со складками по умолчанию.

Иллюстрация на картинке

_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. вы пробовали ViewModel ?

2. @Haroonnasir я пробовал использовать ViewModel, когда хотел загрузить представление регистрации в другом представлении, затем он дал ему ссылку на нулевой указатель

Ответ №1:

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

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

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

вы можете проверить элемент: введите описание изображения здесь

и скопируйте эту часть (в зависимости от версии она может отличаться введите описание изображения здесь

Кодирование (актуальная проблема)

Сам вход в систему не является чем-то особенным, вы можете использовать старую 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")
}
  

Комментарии:

1. привет, Дэдманн, спасибо за ваше время, извините за задержку. asp-for и asp-page предназначены для asp.net основной проект. Этот проект больше не актуален, поскольку я не мог использовать umbraco с asp.net ядро, так что мне пришлось начинать все сначала с asp.net — но полезно, спасибо

2. Ну, я так и не смог ее использовать, я хотел ее запустить, но в то время она не была зрелой, и какой-то драйвер отсутствовал, моя компания все еще использовала версию на основе .net Framework, так что я не смог их увидеть

3. Используете ли вы umbraco и тогда?

4. @Lasse никогда не слышал об этом (до сих пор)…. мы пишем системы с нуля…