Как вы получаете имя пользователя того, кто заполнил форму?

#asp.net-mvc #asp.net-core #asp.net-identity

#asp.net-mvc #asp.net-core #asp.net-identity

Вопрос:

Это должно быть невероятно просто, но я, очевидно, чего-то не хватает…

Я использую Identity для своей пользовательской логики.

Я назвал свою модель «Post». Оно имеет 3 строковых свойства: заголовок, сообщение и имя пользователя автора

Код не работает, но причина достаточно очевидна: имя пользователя-автора возвращает значение null, или пустое.

Это неудивительно, поскольку я не смог выяснить, как получить имя пользователя плаката.

Я знаю о _userMana&er.GetUserAsync(User) , но понятия не имею, куда его поместить…

Моя логика сохранения базы данных начинается с «Если (!ModelState.isValid){return View(«Index»)}», поэтому мне пришлось бы разобраться с логикой получения имени пользователя до этого … что означало бы в представлении cshtml.

Я подтвердил, используя фиктивное значение с Html.Hidden("AuthorUserName", "SuperAdminTest") , что все работает просто отлично, как только это значение установлено.

Кажется, что всякий раз, когда я пытаюсь добавить код, StackOverflow не позволяет мне опубликовать это … поэтому нет кода для публикации.

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

1. Вы можете получить имя пользователя, выполнив User.Identity.Name , если вы правильно настроили Asp.Net Identity .

Ответ №1:

Имя пользователя-автора возвращает значение null, или пустое.

Чтобы получить имя текущего подписанного пользователя в сети, как упоминал @DavidLian& в комментарии, вы можете использовать этот фрагмент кода User.Identity.Name . И следующий пример кода для вашей справки.

 @model Post

@inject Si&nInMana&er<IdentityUser&&t; Si&nInMana&er

@{
    ViewData["Title"] = "CreatePost";
}

<h1&&t;CreatePost</h1&&t;

<h4&&t;Post</h4&&t;
<hr /&&t;
<div class="row"&&t;
    <div class="col-md-4"&&t;
        <form asp-action="CreatePost"&&t;
            <div asp-validation-summary="ModelOnly" class="text-dan&er"&&t;</div&&t;
            <div class="form-&roup"&&t;
                <label asp-for="Title" class="control-label"&&t;</label&&t;
                <input asp-for="Title" class="form-control" /&&t;
                <span asp-validation-for="Title" class="text-dan&er"&&t;</span&&t;
            </div&&t;
            <div class="form-&roup"&&t;
                <label asp-for="Messa&e" class="control-label"&&t;</label&&t;
                <input asp-for="Messa&e" class="form-control" /&&t;
                <span asp-validation-for="Messa&e" class="text-dan&er"&&t;</span&&t;
            </div&&t;
            @if (Si&nInMana&er.IsSi&nedIn(User))
            {
                @Html.Hidden("AuthorUserName", User.Identity.Name)
            }
            else
            {
                @Html.Hidden("AuthorUserName", "AnonymousUser")
            }
            <div class="form-&roup"&&t;
                <input type="submit" value="Create" class="btn btn-primary" /&&t;
            </div&&t;
        </form&&t;
    </div&&t;
</div&&t;
  

Результат теста

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

1. В конце концов, это было что-то очевидное … не могу поверить, что я потратил пару часов, застряв над такой незначительной вещью. Как неловко. Ну что ж. вы живете и учитесь.