smn*_*bss 8 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; }
}
Run Code Online (Sandbox Code Playgroud)
这是我的观点
@using (Html.BeginForm())
{
@Html.LabelFor(m => m.PostCode)
@Html.TextBoxFor(m => m.PostCode)
}
Run Code Online (Sandbox Code Playgroud)
有没有办法让它渲染
<input data-val="true" id="PostCode" name="PostCode" placeholder="type a PostCode here" type="text" value="" />
Run Code Online (Sandbox Code Playgroud)
我无法使它工作,即使从文档http://bit.ly/jVpM8X我可以清楚地看到显示提示应该做的工作
Den*_*aub 15
@Html.TextBoxFor(m => m.PostCode,
new { placeholder = "type a postcode ..." } )
Run Code Online (Sandbox Code Playgroud)
我需要这个确切的功能,但我不想四处改变我所有的EditorFor东西(我有很多页面:)).
为了实现这一点,我只是创建了一个EditorTemplatefor String(如果需要,可以为其他类型执行此操作).
基于我使用的模型属性DisplayName,如下所示:
[DisplayName("Client Name")]
public string ClientName { get; set; }
Run Code Online (Sandbox Code Playgroud)
模板很简单:
@model string
@Html.TextBoxFor(m => m, new { @placeholder = ViewData.ModelMetadata.DisplayName })
Run Code Online (Sandbox Code Playgroud)
然后我的调用代码保持完全相同:
@Html.EditorFor(m => m.FirstName)
Run Code Online (Sandbox Code Playgroud)
此外,您可以使用具有该确切代码的非HTML5浏览器.我所做的只是添加一个脚本引用到这个伟大的jQuery占位符插件,我的所有占位符甚至可以在IE6中工作(!!!!).
我不能 100% 确定,但看起来水印已经进入元数据代码(有一个明确的标准方法来定义与属性一起使用的字符串),但没有进入视图代码,因为还没有一个通用的方法支持在客户端处理水印的方式。
如果手动添加属性不起作用,最好的选择可能是创建一个新的 HTML 帮助程序 Html5TextBoxFor 并使用它来代替标准的 TextBoxFor。
在该帮助程序中,您可以使用 ModelMetadata.FromLambdaExpression 获取提示文本,然后使用从元数据生成的自定义 html 属性对象调用 TextBoxFor。