J'ai un modèle:
[DataType(DataType.EmailAddress)]
[DisplayFormat(ConvertEmptyStringToNull = true)]
[Display(Prompt = "Email Address")]
public string Email { get; set; }
J'essaie de faire en sorte que l'invite s'affiche dans le texte de substitution de la zone de texte résultante avec les éléments suivants:
@Html.EditorFor(model => model.Email,
new { htmlAttributes = new { @class = "form-control input-md",
placeholder = @ViewData.ModelMetadata.Watermark } })
Lorsque je visualise le code HTML généré, je n’obtiens que "placeholder" dans la balise input. Selon ce que j'ai lu, ViewData.ModelMetadata.Watermark devrait fonctionner. Quelle est la bonne façon de mettre en place ce texte de substitution?
Cela a résolu mon problème:
@Html.EditorFor(model => model.Email, new { htmlAttributes =
new { @class = "form-control input-sm",
placeholder = @Html.DisplayNameFor(m=>m.Email) } })
Le code qui l'a fait était
placeholder = @Html.DisplayNameFor(m=>m.Email)
Un peu tard, mais si quelqu'un le cherche toujours ...
@Html.EditorFor(model => model.Email,
new { htmlAttributes = new { @class = "form-control input-md",
@placeholder = "Whatever you want as a placeholder" } })
C'est parfait et propre!
La solution correcte pour obtenir la valeur Prompt
au lieu de DisplayName
dans un contexte de contrôle non basé sur un modèle est la suivante:
@Html.EditorFor(model => model.Email,
new { @class = "form-control input-md",
placeholder = ModelMetadata.FromLambdaExpression(m => m.Email, ViewData).Watermark
})
Cela va également - contrairement à la solution acceptée utilisant @Html.DisplayNameFor(m=>m.Email)
- pas double-échapper au texte en filigrane, ce qui, en fonction du texte et de la langue affichée, peut poser problème.
Utilisez TextBoxFor:
@Html.TextBoxFor(m => m.Email, new { @class = "form-control", @placeholder = Html.DisplayNameFor(m => m.Email) })
@Html.TextBoxFor(m => m.Email, new { @class = "form-control" , @placeholder = "Username" })
Utilisez TextBoxFor comme suit:
@Html.TextBoxFor(model => model.LastName, new{placeholder="Last Name"})
Dans votre méthode de contrôleur qui rend la vue dire
ViewData["Name"] = "blabbity blah";
puis
@Html.TextBoxFor(u => u.Company, new { @placeholder = @ViewData["Name"] })
En fait, mieux encore, vous pouvez le faire.
public ActionResult Index()
{
NewLogin n = new ClassModel().PopModel();
n.Company = "fsdfsdf";
return View(n);
}
@Html.TextBoxFor(u => u.Company, new { @placeholder = Model.Company })