web-dev-qa-db-fra.com

Comment ajouter du texte de substitution du modèle dans une vue MVC?

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?

13
John S

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) 
32
John S

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.

4
marapet

Utilisez TextBoxFor:

@Html.TextBoxFor(m => m.Email, new { @class = "form-control", @placeholder = Html.DisplayNameFor(m => m.Email) })
3
Shalom Dahan
@Html.TextBoxFor(m => m.Email, new { @class = "form-control" , @placeholder = "Username" })
2
Muhammad Bilal

Utilisez TextBoxFor comme suit: 

 @Html.TextBoxFor(model => model.LastName, new{placeholder="Last Name"})
1
dc922

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 })

0
CSharper