鉴于这是我的模特
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开始,我也无法使其工作我可以清楚地看到显示提示应该完成这项工作
答案 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)
您还可以创建自己的HtmlHelper扩展方法,如本文所述: http://mvcdiary.com/2012/09/28/create-a-custom-htmlhelper-textboxfor-to-display-label-text-as-placeholder-integrated-with-twitter-bootstrap/
答案 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 })