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} 

如果这可能,或者可能是这样的