如何在Create.html的标签中获取UserName?

时间:2017-12-20 14:29:18

标签: asp.net-core-2.0

我有一个使用VS 2017(版本15.4)的asp.net核心2.0网站& C#。我有一个评论'已被搭建的模型。用户必须登录才能创建新评论。在' Create.cshtml'我想要'日期'以及'用户名'填写标签 - 而不是输入。只是试图阻止用户使用假名来创建评论。我需要在' Create.html'中使用代码。实现这一目标。以下是我在' Create.html':

中的内容

日期(此作品):

<div class="form-group">
    @Html.LabelFor(model => model.Date, htmlAttributes: new { @class = "control-label col-md-2" })
    <div class="col-md-10">
        @Html.LabelFor(model => model.Date, DateTime.Now.ToShortDateString())
        @Html.ValidationMessageFor(model => model.Date, "", new { @class = "text-danger" })
    </div>
</div>  

UserName(这不起作用):

<div class="form-group">
    @Html.LabelFor(model => model.UserName, htmlAttributes: new { @class = "control-label col-md-2" })
    <div class="col-md-10">
        @Html.LabelFor(model => model.UserName, new { htmlAttributes = new { @class = "control-label", @Value = User.Identity.Name } })
        @Html.ValidationMessageFor(model => model.UserName, "", new { @class = "text-danger" })
    </div>
</div>  

我试图使用标签填写UserName。谢谢你的任何建议。杰夫

1 个答案:

答案 0 :(得分:0)

你的方法有几个问题:

  1. value元素
  2. 上没有label属性
  3. 由于您拥有ViewModel视图的Create.cshtml,并且您拥有UserName属性,因此无需执行LabelForTextBoxFor没有值并初始化Razor视图上的元素值。在初始化服务器端的ViewModel时,您可以这样做。
  4. 修复

    您可以在服务器端初始化值UserName的模型属性User.Identity.Name,并删除视图上的@value = User.Identity.Name

    我的2美分

    如果您只想显示UserName并且不希望它作为输入返回,则您不必将@Html.ValidationMessageFor()放在那里。无论如何,你在回帖时都没有获得价值。

    出于同样的原因,你可以使用带有Razor 1路绑定的常规<label>元素来显示值,即

    <div class="col-md-10">
        <label class="control-label col-md-2">@Model.UserName</label>
    </div>
    

    我看到你正在使用Bootstrap。 Bootstrap 4中有一个名为form-control-plaintext的类,它将为输入元素设置样式并使其看起来像一个标签,这样您实际上也可以将值绑定到输入。

    <!-- Throwing in Tag Helper just for fun -->
    <div class="form-group row">
        <label asp-for="UserName" class="col-form-label col-md-2"></label>
        <div class="col-md-10">
            <input type="text" class="form-control-plaintext" asp-for="UserName"
                readonly />
        </div>
    </div>