用星号掩盖EditorFor模型的整数值

时间:2019-08-14 16:12:25

标签: jquery asp.net-core-2.0

视图中有以下代码:

@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>

是否有一种方法可以使用户输入的每个数字显示一个星号,同时又将模型中的实际值保留下来?

非常感谢! :)

1 个答案:

答案 0 :(得分:0)

用星号屏蔽文本的唯一方法是使用“ password”输入类型,该类型可用于您希望这样混淆的任何类型的信息,而不仅仅是密码。

EditorFor是一个“模板”帮助器,也就是说,它呈现HTML以通过Razor视图修改属性。使用的视图基于属性的类型,所应用的DataType枚举的成员,或显式地通过类似UIHint的视图。对于您这里的财产,这将是Int32.cshtml,因为它是整数。但是,我怀疑您是否想将此应用到每个int属性,所以您想添加[DataType(DataType.Password)][UIHint("Obfuscated")],它们分别对应于Password.cshtml或{ {1}}视图。

这些视图将驻留在Obfuscated.cshtmlViews\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" />