47

默认情况下是否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 })

placeholder我得到标签没有任何文本的html代码

<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">
4

10 回答 10

47

使用插件的替代方法是使用编辑器模板。您需要做的是在Shared\EditorTemplates文件夹中创建一个模板文件并调用它String.cshtml。然后把它放在那个文件中:

@Html.TextBox("",ViewData.TemplateInfo.FormattedModelValue, 
    new { placeholder = ViewData.ModelMetadata.Watermark })

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

@Html.EditorFor(m=>Model.UnitPercent)

不利的一面是,这适用于 type 的属性string,您必须为每个type想要支持水印的属性创建一个模板。

于 2013-04-16T08:19:01.460 回答
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>
于 2015-05-30T20:28:54.917 回答
27

当然可以:

@Html.TextBoxFor(x => x.Email, new { @placeholder = "Email" })
于 2013-04-16T08:10:12.823 回答
13

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

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

希望这可以帮助

于 2015-04-17T14:24:52.133 回答
8

这有效:

@Html.TextBox("name", null,  new { placeholder = "Text" })
于 2015-03-31T11:39:03.910 回答
6

有多种方法可以将占位符绑定到视图:

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")
于 2016-06-02T11:57:21.033 回答
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="">

可以看出,占位符现在已正确渲染。

于 2013-04-16T08:02:30.073 回答
4

Prompt在非模板控制上下文中获取值的正确解决方案是:

@Html.TextBoxFor(model => model.Email, 
    new { placeholder = ModelMetadata.FromLambdaExpression(m => m.Email, ViewData).Watermark }
)

这也不会双重转义水印文本。

于 2017-04-25T14:03:25.913 回答
-1
 @Html.TextBoxFor(m => m.UserName, new { @class = "form-control",@placeholder = "Name"  })  
于 2016-12-03T04:05:48.993 回答
-3

尝试这个:

@Html.TextbBoxFor(x=>x.Email,new { @placeholder=@viewBag.email}

如果这可能,否则可能是什么方式

于 2014-10-29T08:42:08.487 回答