43

I want to use the placeholder attribute in the Html.EditorFor so I did just like in the first answer: Html5 Placeholders with .NET MVC 3 Razor EditorFor extension?

But in the final part, I don't have the EditorTemplates folder so I created it and when I tried to create the string.cshtml view I couldn't because the name "string" is reserved so I chose stringg.cshtml instead and it didn't work! Do I have to change the name elsewhere in my program? I did exactly like the answer...

Thank you!

Community
  • 1
  • 1
caj
  • 2,841
  • 3
  • 18
  • 15

5 Answers5

65

Upgrade to MVC 5.1 and you can use HTML attributes in EditorFor:

@Html.EditorFor(m => m.variable, new { htmlAttributes = new { placeholder = "Your Placeholder Text" } })

http://www.asp.net/mvc/overview/releases/mvc51-release-notes

Josh M.
  • 26,437
  • 24
  • 119
  • 200
Medo
  • 968
  • 1
  • 11
  • 26
  • +1 - Thank you for that link. I would say this is your best option if you're willing to upgrade to 5.1. Works great. – Termato Nov 06 '14 at 19:04
  • 1
    Why did you have to use `@` before the `placeholder` attribute? – Yoda Mar 10 '15 at 11:43
  • I'm not sure why, but that's how it's done. When you enumerate htmlAttributes you need to use @ for them to be recognized. (@class, @id ...) – Medo Mar 10 '15 at 12:37
  • 12
    @Yoda @Medo `@` is not necessary in this case. `@` is used only if variable name is the same as any of the C# keywords, i.e. `@class`. – romanoza May 05 '15 at 14:23
18
 @Html.EditorFor(model => model.members_ssn, new { htmlAttributes = new { @class = "form-control", placeholder = "Your Example Here" } })
Roman Marusyk
  • 23,328
  • 24
  • 73
  • 116
Jay
  • 404
  • 6
  • 18
7

This works for MVC 5.

In my case i was looking to set the placeholder from the model metadata, like this:

@Html.EditorFor(model => model.name, new { htmlAttributes = new { @class = "form-control", placeholder = Html.DisplayNameFor(x => x.name) } })
César León
  • 2,941
  • 1
  • 21
  • 18
4

When using TextBoxFor or TextAreaFor rather than EditorFor, use only the inner key-value pair from @Medo's answer, since the method directly expects an htmlAttributes object:

@Html.TextBoxFor(m => m.variable, new { placeholder = "Your Placeholder Text" })

(I realize this is tangential to the original question, but having this here would have helped me when I landed on this page earlier, looking for an answer to how to add placeholder text to an Html.TextAreaFor!)

Jon Schneider
  • 25,758
  • 23
  • 142
  • 170
0

Use some jquery, eg: $("#FirstName").attr("placeholder", "Do not type name - use Search button");

Antony D
  • 434
  • 4
  • 6