我有一个使用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。谢谢你的任何建议。杰夫
答案 0 :(得分:0)
你的方法有几个问题:
value
元素label
属性
ViewModel
视图的Create.cshtml
,并且您拥有UserName
属性,因此无需执行LabelFor
或TextBoxFor
没有值并初始化Razor视图上的元素值。在初始化服务器端的ViewModel
时,您可以这样做。您可以在服务器端初始化值UserName
的模型属性User.Identity.Name
,并删除视图上的@value = User.Identity.Name
。
如果您只想显示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>