MVC4输入字段占位符

Tom*_*mas 46 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 })
Run Code Online (Sandbox Code Playgroud)

我得到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">
Run Code Online (Sandbox Code Playgroud)

von*_* v. 45

An alternative to using a plugin is using an editor template. What you need to do is to create a template file in Shared\EditorTemplates folder and call it String.cshtml. Then put this in that file:

@Html.TextBox("",ViewData.TemplateInfo.FormattedModelValue, 
    new { placeholder = ViewData.ModelMetadata.Watermark })
Run Code Online (Sandbox Code Playgroud)

然后在您的视图中使用它,如下所示:

@Html.EditorFor(m=>Model.UnitPercent)
Run Code Online (Sandbox Code Playgroud)

缺点是,这适用于类型属性string,您必须为每个type要支持水印的模板创建模板.


小智 41

我这样做了

模型中的字段:

[Required]
[Display(Name = "User name")]
public string UserName { get; set; }
Run Code Online (Sandbox Code Playgroud)

剃刀:

<li>
  @Html.TextBoxFor(m => m.UserName, new { placeholder = Html.DisplayNameFor(n => n.UserName)})
</li>
Run Code Online (Sandbox Code Playgroud)


Pan*_*nos 27

当然它确实:

@Html.TextBoxFor(x => x.Email, new { @placeholder = "Email" })
Run Code Online (Sandbox Code Playgroud)

  • 我想用MVC方法. (2认同)

rea*_*eaz 13

您可以轻松添加Css类,占位符等,如下所示:

@Html.TextBoxFor(m => m.Name, new { @class = "form-control", placeholder="Name" })
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助


Mor*_*ard 8

这有效:

@Html.TextBox("name", null,  new { placeholder = "Text" })
Run Code Online (Sandbox Code Playgroud)


Smi*_*tel 6

有这样的方法来绑定占位符:

1)使用MVC数据注释:

模型:

[Required]
[Display(Prompt = "Enter Your First Name")]
public string FirstName { get; set; }
Run Code Online (Sandbox Code Playgroud)

剃刀语法:

@Html.TextBoxFor(m => m.FirstName, new { placeholder = @Html.DisplayNameFor(n => n.UserName)})
Run Code Online (Sandbox Code Playgroud)

2)使用MVC数据注释但使用DisplayName:

模型:

[Required]
[DisplayName("Enter Your First Name")]
public string FirstName { get; set; }
Run Code Online (Sandbox Code Playgroud)

剃刀语法:

@Html.TextBoxFor(m => m.FirstName, new { placeholder = @Html.DisplayNameFor(n => n.UserName)})
Run Code Online (Sandbox Code Playgroud)

3)不使用MVC数据注释(推荐):

剃刀语法:

@Html.TextBoxFor(m => m.FirstName, new { @placeholder = "Enter Your First Name")
Run Code Online (Sandbox Code Playgroud)