jquery - 用星号屏蔽 EditorFor 模型的整数值
问题描述
我在视图中有以下代码:
@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>
有没有办法让它为用户输入的每个数字显示一个星号,同时保持模型中的真实值?
非常感谢提前!:)
解决方案
用星号屏蔽文本的唯一方法是使用“密码”输入类型,它可用于您想要像这样混淆的任何类型的信息,而不仅仅是密码。
EditorFor
但是,它是一个“模板化”帮助器,也就是说,它呈现 HTML 以通过 Razor 视图修改属性。使用的视图基于属性的类型、DataType
应用的枚举成员,或通过类似UIHint
. 就您的财产而言,这将是Int32.cshtml
,因为它是一个 int。但是,我怀疑您是否希望将其应用于每个 int 属性,因此您可能想要分别对应于 a or视图的 add [DataType(DataType.Password)]
or 。[UIHint("Obfuscated")]
Password.cshtml
Obfuscated.cshtml
这些视图将驻留在Views\Shared\EditorTemplates
或Pages\Shared\EditorTemplates
中,具体取决于您使用的样式。该UIHint
属性可以设置为任何内容(我只是选择了“混淆”)。无论您作为字符串放在那里,都需要为相应的视图命名。
现在,假设这些都不是真的:没有Int32.cshtml
编辑器模板视图,并且DataType
/UIHint
属性尚未应用,那么EditorFor
将回退到默认模板,对于 int 属性,它将是“数字”类型的输入。在 ASP.NET MVC 5 中,只能通过传递带有htmlAttributes
成员的匿名对象来在这些默认模板中添加/修改 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" />
推荐阅读
- flutter - 颤动的纵横比错误
- javascript - 带有 Laravel REST API 的 Reactjs:请求的资源上不存在“Access-Control-Allow-Origin”标头
- xamarin - 无法更改 Xamarin 表单代码中的标签文本
- file - 如何使用批处理脚本生成类似于保存在一个特定位置的文件的多个文件
- java - 无法使用改造设置标题
- python - 通过 CGI 输出 JSON
- javascript - 如何使用 Selenium WebDriver Java 处理基本浏览器身份验证?
- html - 如何设置从
- python - 过滤单元格中有数组的熊猫数据框
- c++ - 无法打开文件'sfml-system-d.lib' - C++