用星号屏蔽 EditorFor 模型的整数值

Masking an EditorFor Model's integer value with Asterisks

我在视图中有以下代码:

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

有没有办法让它为用户输入的每个数字显示一个星号,同时在模型中保留真实值?

非常感谢! :)

用星号屏蔽文本的唯一方法是使用 "password" 的输入类型,它可用于您想要像这样混淆的任何类型的信息,而不仅仅是密码。

然而,

EditorFor 是一个 "templated" 帮助程序,也就是说它呈现 HTML 以通过 Razor 视图修改 属性。使用的视图基于 属性 的类型,应用的 DataType 枚举的成员,或通过 UIHint 之类的明确方式。对于此处的 属性,那将是 Int32.cshtml,因为它是一个整数。但是,我怀疑您是否想将此应用于每个 int 属性,因此您想要添加 [DataType(DataType.Password)][UIHint("Obfuscated")],这将对应于 [=19] =] 或 Obfuscated.cshtml 视图。

这些视图将驻留在 Views\Shared\EditorTemplatesPages\Shared\EditorTemplates 中,具体取决于您使用的样式。 UIHint 属性可以设置为任何值(我只​​是选择了 "Obfuscated")。无论您放在那里,因为字符串就是相应的视图需要命名的内容。

现在,假设 none 这些事情是真的:没有 Int32.cshtml 编辑器模板视图,并且 DataType/UIHint 属性没有被应用,那么EditorFor 将回退到默认模板,这是因为 int 属性将是 "number" 类型的输入。在 ASP.NET MVC 5 中,只有通过传递一个带有 htmlAttributes 成员的匿名对象,才能在这些默认模板中设置 add/modify HTML 属性,该成员本身就是属性名称和值:

@Html.EditorFor(x => x.EmployeeId, new { htmlAttributes = new { type = "password" } })

我不确定这在 ASP.NET Core 中是否同样有效,因为我从来不需要尝试,但如果你愿意,你可以试一试。

不过,总的来说,无论如何只使用标签助手要好得多。除了使用 @Html.EditorFor(x => x.EmployeeId),您还可以这样做:

<input asp-for="EmployeeId" />

然后,您可以通过以下方式轻松将其设为密码字段:

<input asp-for="EmployeeId" type="password" />