您如何获得填写表格的人的用户名?

How do you get the username of someone who has filled in a form?

这一定非常简单,但我显然遗漏了一些东西...

我正在为我的用户逻辑使用身份。

我将我的模型命名为“Post”。它有 3 个字符串属性:标题、消息和作者用户名

代码无法运行,但原因很明显:AuthorUsername return为 null,或为空。

这并不奇怪,因为我一直无法弄清楚如何获取 poster 的用户名。

我知道 _userManager.GetUserAsync(User) 但我不知道该把它放在哪里...

我的数据库保存逻辑以“If(!ModelState.IsValid){returnView("Index")}开头,所以我得整理一下获取用户名的逻辑在那之前...这意味着在 cshtml 视图中。

我已经通过使用带有 Html.Hidden("AuthorUserName", "SuperAdminTest") 的虚拟值确认,一旦设置了该值,一切都会正常工作。

似乎每当我尝试添加代码时,Whosebug 都会阻止我 posting 这个...所以没有代码到 post。

The AuthorUsername is returning null, or empty.

要获取当前登录用户的名称,正如@DavidLiang 在评论中提到的,您可以使用此代码片段User.Identity.Name。以下示例代码供您参考。

@model Post

@inject SignInManager<IdentityUser> SignInManager

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

<h1>CreatePost</h1>

<h4>Post</h4>
<hr />
<div class="row">
    <div class="col-md-4">
        <form asp-action="CreatePost">
            <div asp-validation-summary="ModelOnly" class="text-danger"></div>
            <div class="form-group">
                <label asp-for="Title" class="control-label"></label>
                <input asp-for="Title" class="form-control" />
                <span asp-validation-for="Title" class="text-danger"></span>
            </div>
            <div class="form-group">
                <label asp-for="Message" class="control-label"></label>
                <input asp-for="Message" class="form-control" />
                <span asp-validation-for="Message" class="text-danger"></span>
            </div>
            @if (SignInManager.IsSignedIn(User))
            {
                @Html.Hidden("AuthorUserName", User.Identity.Name)
            }
            else
            {
                @Html.Hidden("AuthorUserName", "AnonymousUser")
            }
            <div class="form-group">
                <input type="submit" value="Create" class="btn btn-primary" />
            </div>
        </form>
    </div>
</div>

测试结果