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)
缺点是,这对string
types的属性起作用,并且您将不得不为每种需要水印支持的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}
如果这可能,或者可能是这样的