MVC4输入字段占位符

时间:2013-04-16 07:43:26

标签: asp.net-mvc asp.net-mvc-4

默认情况下,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">

9 个答案:

答案 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}

如果可能,或者可能是什么方式