MVC4input字段占位符
 MVC4默认支持生成input字段的placeholders吗? 我没有find任何东西,所以我试图实现自己的,但不幸的是, Prompt = "E-Mail"不会传递给ViewData.ModelMetadata.Watermark生成控件。 为什么? 
模型
 public class LogOnModel { [Required] [Display(Name = "E-Mail", Prompt = "E-Mail")] [DataType(DataType.EmailAddress)] public string Email { get; set; } } @Html.TextBoxFor(m => m.Email, new { placeholder = ViewData.ModelMetadata.Watermark }) 
 我得到的HTML代码,其中placeholder标签没有任何文字 
 <input data-val="true" data-val-regex="Please enter a valid e-mail address" data-val-required="The E-Mail field is required." id="Email" name="Email" placeholder="" type="text" value="" class="valid"> 
	
 使用插件的替代方法是使用编辑器模板。 你需要做的是在Shared\EditorTemplates文件夹中创build一个模板文件,并将其命名为String.cshtml 。 然后把这个文件: 
 @Html.TextBox("",ViewData.TemplateInfo.FormattedModelValue, new { placeholder = ViewData.ModelMetadata.Watermark }) 
然后像你这样使用它:
 @Html.EditorFor(m=>Model.UnitPercent) 
 缺点是,这对stringtypes的属性起作用,并且您将不得不为每种需要水印支持的type创build一个模板。 
我这样做了
模型领域:
 [Required] [Display(Name = "User name")] public string UserName { get; set; } 
剃刀:
 <li> @Html.TextBoxFor(m => m.UserName, new { placeholder = Html.DisplayNameFor(n => n.UserName)}) </li> 
当然它确实:
 @Html.TextBoxFor(x => x.Email, new { @placeholder = "Email" }) 
您可以轻松添加Css类,占位符等,如下所示:
 @Html.TextBoxFor(m => m.Name, new { @class = "form-control", placeholder="Name" }) 
希望这可以帮助
这工作:
 @Html.TextBox("name", null, new { placeholder = "Text" }) 
默认情况下,它不。 但是,您可以使用具有可以输出HTML5的HTML助手的MVCHtml5Toolkit NuGet包。 对于你的例子,安装工具包之后,你可以使用下面的HTML帮助程序调用:
 @Html.Html5TextBoxFor(m => m.Email, InputTypes.InputType.Email) 
这将输出下面的HTML:
 <input id="Email" name="Email" placeholder="E-Mail" type="Email" value=""> 
可以看出,占位符现在已经被正确渲染了。
有这样的方法来绑定一个占位符来查看:
1)使用MVC数据注释:
模型:
 [Required] [Display(Prompt = "Enter Your First Name")] public string FirstName { get; set; } 
剃刀语法:
 @Html.TextBoxFor(m => m.FirstName, new { placeholder = @Html.DisplayNameFor(n => n.UserName)}) 
2)使用MVC数据注释但是使用DisplayName:
模型:
 [Required] [DisplayName("Enter Your First Name")] public string FirstName { get; set; } 
剃刀语法:
 @Html.TextBoxFor(m => m.FirstName, new { placeholder = @Html.DisplayNameFor(n => n.UserName)}) 
3)不使用MVC数据注释(推荐):
剃刀语法:
 @Html.TextBoxFor(m => m.FirstName, new { @placeholder = "Enter Your First Name") 
 在非模板控制上下文中获取Prompt值的正确解决scheme是: 
 @Html.TextBoxFor(model => model.Email, new { placeholder = ModelMetadata.FromLambdaExpression(m => m.Email, ViewData).Watermark } ) 
这也不会双重转义水印文本。
  @Html.TextBoxFor(m => m.UserName, new { @class = "form-control",@placeholder = "Name" }) 
尝试这个:
 @Html.TextbBoxFor(x=>x.Email,new { @placeholder=@viewBag.email} 
如果这可能,或者可能是这样的