#MVC3 有没有办法使用 DataAnnotations 属性添加 HTML5 占位符属性
本文关键字:属性 添加 HTML5 占位符 DataAnnotations 有没有 #MVC3 | 更新日期: 2023-09-27 17:59:24
鉴于这是我的模型
public class ValidationModel
{
#region Properties
[Display(Prompt = "type a PostCode here")]
public string PostCode { get; set; }
}
这是我的观点
@using (Html.BeginForm())
{
@Html.LabelFor(m => m.PostCode)
@Html.TextBoxFor(m => m.PostCode)
}
有没有办法让它渲染
<input data-val="true" id="PostCode" name="PostCode" placeholder="type a PostCode here" type="text" value="" />
即使从文档中 http://bit.ly/jVpM8X 我可以清楚地看到显示提示应该完成这项工作,我也无法使其工作
@Html.TextBoxFor(m => m.PostCode,
new { placeholder = "type a postcode ..." } )
我需要这个确切的功能,但我不想四处走动,把我所有的EditorFor
都改成不同的东西(我有很多页面:)(。
为了实现这一点,我只是为String
创建了一个EditorTemplate
(如果需要,你可以为其他类型的类型执行此操作(。
根据我的模型属性,我DisplayName
使用,如下所示:
[DisplayName("Client Name")]
public string ClientName { get; set; }
模板很简单:
@model string
@Html.TextBoxFor(m => m, new { @placeholder = ViewData.ModelMetadata.DisplayName })
然后我的调用代码保持不变:
@Html.EditorFor(m => m.FirstName)
此外,您可以使用该确切代码为非HTML5浏览器执行此操作。我所做的只是为这个伟大的jQuery占位符插件添加一个脚本引用,我所有的占位符甚至可以在IE6(!!!(中工作。
> 我不能 100% 确定,但看起来水印已经进入元数据代码(有一种明确的标准方法来定义与属性一起使用的字符串(但不是视图代码,因为还没有一种普遍支持的方式来处理客户端的水印。
如果手动添加属性不起作用,最好的选择可能是创建一个新的 HTML 帮助程序 Html5TextBoxFor 并使用它而不是标准的 TextBoxFor。
在该帮助程序中,您可以使用 ModelMetadata.FromLambdaExpression 获取提示文本,然后使用从元数据生成的自定义 html 属性对象调用 TextBoxFor。
可以通过使用 new {}
关键字在@html.control
中分配属性的值,然后通过@
以符号开头定义属性,将 razor 视图中的任何 html 属性添加到 HTML 帮助程序中,如果您在 razor 中使用表示 html 属性的保留关键字,例如您需要在该单词之前添加@
class
, 与 Razor 引擎处理 HTML DOM 元素的方式相同,例如:
@Html.TextBoxFor(x => x.Name, new { @class = "form-control", placeholder = "Your Name" } )
您还可以创建自己的 HtmlHelper 扩展方法来执行此操作,如本文中所述:http://mvcdiary.com/2012/09/28/create-a-custom-htmlhelper-textboxfor-to-display-label-text-as-placeholder-integrated-with-twitter-bootstrap/
虽然你可能从来没有真正这样做过,但作为概念证明,你可以这样做:
型:
[Required, Display(Description = "Type your note here...")]
public string Note { get; set; }
视图:
@Html.TextAreaFor(x => x.Note, new { placeholder = ViewData.ModelMetadata
.Properties.FirstOrDefault(x => x.PropertyName == "Note")?.Description })