Как добавить текст-заполнитель из модели в представление MVC?

У меня есть модель:

[DataType(DataType.EmailAddress)]
[DisplayFormat(ConvertEmptyStringToNull = true)]
[Display(Prompt = "Email Address")]
public string Email { get; set; }

Я пытаюсь получить "приглашение" для отображения в тексте-заполнителе полученного текстового поля со следующим:

@Html.EditorFor(model => model.Email, 
new { htmlAttributes = new { @class = "form-control input-md",
placeholder = @ViewData.ModelMetadata.Watermark } })

Когда я просматриваю сгенерированный HTML, я получаю "placeholder" во входном теге. В соответствии с тем, что я прочитал ViewData.ModelMetadata.Watermark должен работать. Каков правильный способ получить этот текст заполнителя?

Ответ 1

Это решило мою проблему:

@Html.EditorFor(model => model.Email, new { htmlAttributes = 
new { @class = "form-control input-sm", 
placeholder = @Html.DisplayNameFor(m=>m.Email) } })

Код, который сделал это, был

placeholder = @Html.DisplayNameFor(m=>m.Email) 

Ответ 2

Немного поздно, но если кто-то все еще ищет его...

@Html.EditorFor(model => model.Email, 
new { htmlAttributes = new { @class = "form-control input-md",
@placeholder = "Whatever you want as a placeholder" } })

Это прекрасно и чисто!

Ответ 3

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

Ответ 4

Используйте TextBoxДля так:

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

Ответ 5

Использовать TextBoxFor:

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

Ответ 6

В вашем методе контроллера, который отображает представление, скажите

ViewData["Name"] = "blabbity blah";

затем

@Html.TextBoxFor(u => u.Company, new { @placeholder = @ViewData["Name"] })

На самом деле лучше, но вы можете это сделать.

 public ActionResult Index()
    {              
          NewLogin n = new ClassModel().PopModel();
          n.Company = "fsdfsdf";

          return View(n);
    }

@Html.TextBoxFor(u => u.Company, new { @placeholder = Model.Company })

Ответ 7

Правильное решение для получения значения Prompt вместо DisplayName в нетемплифицированном контексте управления выглядит следующим образом:

@Html.EditorFor(model => model.Email, 
    new { @class = "form-control input-md",
    placeholder = ModelMetadata.FromLambdaExpression(m => m.Email, ViewData).Watermark
})

Это также - в отличие от принятого решения с использованием @Html.DisplayNameFor(m=>m.Email) - не сбрасывает двойной текст водяного знака, который в зависимости от текста и отображаемого языка может быть проблемой.

Ответ 8

Проверьте ответы на этот вопрос, на который ответил aleady (несколько раз).

@Html.EditorFor использует шаблоны, поэтому подход к этой проблеме заключается в использовании настраиваемого шаблона.

Ответ 9

вы можете использовать его следующим образом для даты, которая также даст вам сборщик "datetime".

[DisplayFormat (DataFormatString = "{0: yyyy-MM-dd}", ApplyFormatInEditMode = true)]