默认情况下,MVC4
是否支持placeholders
生成的输入字段?我没有找到任何东西,所以我试图实现自己的,但不幸的是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">
答案 0 :(得分:44)
使用插件的另一种方法是使用编辑器模板。您需要做的是在Shared\EditorTemplates
文件夹中创建一个模板文件并将其命名为String.cshtml
。然后把它放在那个文件中:
@Html.TextBox("",ViewData.TemplateInfo.FormattedModelValue,
new { placeholder = ViewData.ModelMetadata.Watermark })
然后在你的视图中使用它:
@Html.EditorFor(m=>Model.UnitPercent)
缺点是,这适用于string
类型的属性,您必须为希望支持水印的每个type
创建一个模板。
答案 1 :(得分:41)
我这样做了
模型中的字段:
[Required]
[Display(Name = "User name")]
public string UserName { get; set; }
剃刀:
<li>
@Html.TextBoxFor(m => m.UserName, new { placeholder = Html.DisplayNameFor(n => n.UserName)})
</li>
答案 2 :(得分:27)
当然可以:
@Html.TextBoxFor(x => x.Email, new { @placeholder = "Email" })
答案 3 :(得分:13)
您可以轻松添加Css类,占位符等,如下所示:
@Html.TextBoxFor(m => m.Name, new { @class = "form-control", placeholder="Name" })
希望这有帮助
答案 4 :(得分:7)
这有效:
@Html.TextBox("name", null, new { placeholder = "Text" })
答案 5 :(得分:6)
有这样的方法可以将占位符绑定到视图:
1)使用MVC数据注释:
型号:
[Required]
[Display(Prompt = "Enter Your First Name")]
public string FirstName { get; set; }
Razor语法:
@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; }
Razor语法:
@Html.TextBoxFor(m => m.FirstName, new { placeholder = @Html.DisplayNameFor(n => n.UserName)})
3)不使用MVC数据注释(推荐):
Razor语法:
@Html.TextBoxFor(m => m.FirstName, new { @placeholder = "Enter Your First Name")
答案 6 :(得分:4)
默认情况下,它没有。但是,您可以使用具有可以输出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="">
可以看出,占位符现在已正确呈现。
答案 7 :(得分:4)
在非模板控制上下文中获取Prompt
值的正确解决方案是:
@Html.TextBoxFor(model => model.Email,
new { placeholder = ModelMetadata.FromLambdaExpression(m => m.Email, ViewData).Watermark }
)
这也将不双重转义水印文本。
答案 8 :(得分:-3)
试试这个:
@Html.TextbBoxFor(x=>x.Email,new { @placeholder=@viewBag.email}
如果可能,或者可能是什么方式