在#MVC3中有没有办法使用DataAnnotations属性添加HTML5占位符属性?

时间:2011-06-16 16:10:07

标签: c# asp.net-mvc html5 asp.net-mvc-3

鉴于这是我的模特

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开始,我也无法使其工作我可以清楚地看到显示提示应该完成这项工作

6 个答案:

答案 0 :(得分:15)

@Html.TextBoxFor(m => m.PostCode, 
    new { placeholder = "type a postcode ..." } )

答案 1 :(得分:9)

我需要这个确切的功能,但我不想四处改变我所有的EditorFor是不同的(我有一个很多的页面:))

为实现这一目标,我只为EditorTemplate创建了String(如果需要,可以为其他类型创建)。

基于我的模型属性,我使用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浏览器。我所做的就是添加一个脚本引用this great jQuery placeholder plugin,所有占位符甚至可以在IE6中工作(!!!!)。

答案 2 :(得分:2)

我不能百分百肯定,但看起来水印已经成为元数据代码(有一种明确的标准方式来定义一个属性的字符串)但不是视图代码,因为没有但是在客户端处理水印的普遍支持方式。

如果手动添加属性不起作用,最好的选择可能是创建一个新的HTML帮助器Html5TextBoxFor并使用它而不是标准的TextBoxFor。

在该帮助程序中,您可以使用ModelMetadata.FromLambdaExpression获取提示文本,然后使用从元数据生成的自定义html属性对象调用TextBoxFor。

答案 3 :(得分:1)

razor视图中的任何html属性都可以添加到 HTML帮助,方法是使用@html.control关键字在new {}中指定属性的值,然后以{{开头定义属性1}}符号如果您在razor中使用保留关键字来表示html属性,例如@,则需要在该字词之前添加class,就像Razor引擎处理HTML DOM元素一样:

@

答案 4 :(得分:0)

答案 5 :(得分:0)

Although you may not ever actually do this, as a proof of concept you could do this:

Model:

[Required, Display(Description = "Type your note here...")]
public string Note { get; set; }

View:

@Html.TextAreaFor(x => x.Note, new { placeholder = ViewData.ModelMetadata
    .Properties.FirstOrDefault(x => x.PropertyName == "Note")?.Description })