User.Identity.GetUserName()不会显示任何内容

时间:2017-02-17 19:30:15

标签: c# entity-framework asp.net-core-mvc

我试图在Create.cshtml页面上的特定字段中以与_LoginPartial.cshtml相同的方式显示用户名。

我在顶部有这个:

@using Microsoft.AspNet.Identity

在我的cshtml中:

<div class="form-group">
            @Html.LabelFor(model => model.CreatedBy, htmlAttributes: new { @class = "control-label col-md-2" })
            <div class="form-control-static">
                @Html.Display(User.Identity.GetUserName())
                @Html.Hidden(User.Identity.GetUserName())
                @Html.ValidationMessageFor(model => model.CreatedBy, "", new { @class = "text-danger" })
            </div>
        </div>

但是当显示页面时,尽管用户名出现在内置部分的顶部,但它不会显示在表单中应该显示的位置。那里什么都没有。没有错误。

3 个答案:

答案 0 :(得分:3)

检查可能的身份验证问题

GetUserName()方法只返回当前经过身份验证的用户的名称,因此如果您未登录任何现有帐户,则该帐户将为空。

这取决于应用程序的身份验证模式(即基于表单的身份验证,Windows等),这通常可以在web.config文件的<authentication>部分中看到:

<!-- Forms-based authentication (i.e. default username/password scenario) -->
<authentication mode="Forms"/> 
<!-- Windows-based authentication (i.e. use current account) -->
<authentication mode="Windows"/>

在文件&gt;中新项目方案,可能会启用表单身份验证(除非明确取消选中),因此您应该只需创建一个新帐户,然后登录该帐户即可查看在View中正确显示的用户名。

考虑替代用法

如果您确定您的身份验证不是潜在问题,请考虑完全避免使用HTML Helper方法,只需使用现有的GetUserName()方法或User.Identity.Name将值输出到隐藏字段即可属性,假设您没有修改声明,则应返回相同的值:

<div class="form-control-static">
   <!-- Either of these approaches should work if you are authenticated -->
   <input type='hidden' value='@User.Identity.GetUserName()' />
   <input type='hidden' value='@User.Identity.Name' />
   @Html.ValidationMessageFor(model => model.CreatedBy, "", new { @class = "text-danger" })
</div>

如果一切都失败了......

如果所提出的解决方案似乎都没有起作用,那么很可能在项目中没有正确配置某些内容(即内置的Identity逻辑)。

如果您创建了一个空项目,然后只是粘贴了默认模板中的一些代码,可能就是这种情况,其中Identity将无法正确设置。

答案 1 :(得分:0)

请尝试@Html.DisplayFor()

@Html.DisplayFor(x=>User.Identity.Name)

或者

@Html.DisplayFor(x=>User.Identity.GetUserName())

答案 2 :(得分:0)

事实证明,我能够设法将当前用户的电子邮件传递到创建页面的唯一方法是创建模型的新实例并设置&#34; CreatedBy&#34;控制器的GET方法中的属性,然后将该模型传递给视图并使用DisplayFor。

    public ActionResult Create()
    {
        NewUser nu = new NewUser();
        nu.CreatedBy = User.Identity.Name;
        ViewBag.DepartmentId = new SelectList(db.departments, "DepartmentId", "DepartmentName");
        ViewBag.LocationId = new SelectList(db.locations, "LocationId", "LocationName");
        return View(nu);
    }

    <div class="form-group">
        @Html.LabelFor(model => model.CreatedBy, htmlAttributes: new { @class = "control-label col-md-2" })
        <div class="form-control-static">
            &nbsp;&nbsp;
            @Html.DisplayFor(m => m.CreatedBy, new { htmlAttributes = new { @class = "form-control" } })
            @Html.HiddenFor(m => m.CreatedBy)
            @Html.ValidationMessageFor(model => model.CreatedBy, "", new { @class = "text-danger" })
        </div>
    </div>