视图中有以下代码:
@Html.EditorFor(model => model.EmployeeId, new { htmlAttributes = new { @class = "form-control", @tabIndex = 4 } })
我的模特有:
[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:#.#}")]
[Display(Name = "Badge")]
[Required]
public int EmployeeId { get; set; }
我正在尝试获取employeeId文本框的输入,使其变成星号,就好像它是密码一样。我不能使用PasswordFor标记,因为我们不希望该标记由浏览器保存或提示。
我知道当该字段在jQuery中失去焦点时,我可以更改实际值,但是由于某些原因,似乎无法设置该字段文本,并且它会继续显示数值。
<script type="text/javascript">
$('#EmployeeId').focusout(function () {
$(this).text('***');
})
</script>
是否有一种方法可以使用户输入的每个数字显示一个星号,同时又将模型中的实际值保留下来?
非常感谢! :)
答案 0 :(得分:0)
用星号屏蔽文本的唯一方法是使用“ password”输入类型,该类型可用于您希望这样混淆的任何类型的信息,而不仅仅是密码。
EditorFor
是一个“模板”帮助器,也就是说,它呈现HTML以通过Razor视图修改属性。使用的视图基于属性的类型,所应用的DataType
枚举的成员,或显式地通过类似UIHint
的视图。对于您这里的财产,这将是Int32.cshtml
,因为它是整数。但是,我怀疑您是否想将此应用到每个int属性,所以您想添加[DataType(DataType.Password)]
或[UIHint("Obfuscated")]
,它们分别对应于Password.cshtml
或{ {1}}视图。
这些视图将驻留在Obfuscated.cshtml
或Views\Shared\EditorTemplates
中,具体取决于您采用的样式。 Pages\Shared\EditorTemplates
属性可以设置为任何值(我只是选择了“模糊处理”)。无论您在哪里放置字符串,都需要命名相应的视图。
现在,假设所有这些都不成立:没有UIHint
编辑器模板视图,并且Int32.cshtml
/ DataType
属性尚未应用,那么UIHint
将后退到默认模板(用于int道具)将是“数字”类型的输入。在ASP.NET MVC 5中,仅可以通过传递带有EditorFor
成员的匿名对象来添加/修改这些默认模板中的HTML属性,该成员本身就是属性名称和值的匿名对象:
htmlAttributes
我不确定这在ASP.NET Core中是否可以正常工作,这是我从不需要尝试的,但是您可以尝试一下。
尽管如此,总的来说,最好还是使用标签助手。除了使用@Html.EditorFor(x => x.EmployeeId, new { htmlAttributes = new { type = "password" } })
,您还可以这样做:
@Html.EditorFor(x => x.EmployeeId)
然后,您可以通过以下方式轻松地将其设置为密码字段:
<input asp-for="EmployeeId" />