Don't do this.
Placeholder text is not a value. It should not be posted. It should not be validated.
This contradicts common sense, is a crime against humanity and introduces several problems.
What if you need an optional number field with a placeholder text?
(Validation will fail because placeholder is a string.)
What happens when your application is localized?
(Validation will fail until someone finds this attribute value is being compared with.)
Validation will have to be server-only and there will be no way to “grey out” placeholder text.
(Unless you specify the placeholder once more in the script file and monitor change events.)
You will have to specify this “placeholder” at least twice, and in different places.
(If I got you right, it's once in the attribute and once in the constructor.)
There will be no way for placeholder to actually be the value.
(This can happen, if not for this field, then for any other that uses the attribute.)
This will freak the hell out of the future maintainers.
(Do you even doubt that?)
Instead,
Use placeholder
attribute and degrading solutions as suggested by Milimetric.
As an alternative for restless DYI-ers, place the label in a div
and position it over the input field with your own JavaScript. This is known as “overlabel” technique and there are plenty examples on the web. (But you'll have to test your solution thoroughly on the browsers you want to support.) You may even roll out your own custom HTML helper:
@Html.PlaceholderFor(m => m.SomeField)
(I completely made it up, it's up to you to implement it.)