в # MVC3 есть способ добавить атрибут-заполнитель HTML5 с помощью атрибута DataAnnotations? - PullRequest
8 голосов
/ 16 июня 2011

учитывая, что это моя модель

public class ValidationModel
{
    #region Properties

    [Display(Prompt = "type a PostCode here")]
    public string PostCode { get; set; }

}

и это мое мнение

@using (Html.BeginForm())
{
    @Html.LabelFor(m => m.PostCode)
    @Html.TextBoxFor(m => m.PostCode)

}

есть ли способ заставить ее отрендерить

<input data-val="true" id="PostCode" name="PostCode" placeholder="type a PostCode here" type="text" value="" />

Я мог быне заставить его работать, даже если из документации http://bit.ly/jVpM8X я ясно вижу, что Display Prompt должен выполнить работу

Ответы [ 6 ]

15 голосов
/ 16 июня 2011
@Html.TextBoxFor(m => m.PostCode, 
    new { placeholder = "type a postcode ..." } )
9 голосов
/ 11 июля 2013

Мне нужна была именно эта функциональность, но я не хотел обойти и изменить все мои EditorFor на что-то другое (у меня есть лот страниц:)).

Для этого я просто создал EditorTemplate для String (вы можете сделать это для других типов, если вам это нужно).

На основе свойств моей модели, которые я использую DisplayName, например:

[DisplayName("Client Name")]
public string ClientName { get; set; }

Шаблон был просто:

@model string

@Html.TextBoxFor(m => m, new { @placeholder = ViewData.ModelMetadata.DisplayName })

И тогда мой код вызова остался прежним:

@Html.EditorFor(m => m.FirstName)

Кроме того, вы можете выполнить эту работу для браузеров, отличных от HTML5, с этим точным кодом. Все, что я сделал, это добавил ссылку на скрипт к этому замечательному плагину-заполнителю jQuery и все мои заполнители даже работают в IE6 (!!!!).

2 голосов
/ 17 июня 2011

Я не могу быть уверен на 100%, но похоже, что водяные знаки превратили его в код метаданных (есть четкий стандартный способ определения строки, которая идет со свойством), но не код представления, поскольку его нет. все же универсально поддерживаемый способ обработки водяных знаков на стороне клиента.

Если добавление атрибутов вручную не будет работать, возможно, лучше всего создать новый HTML-помощник Html5TextBoxFor и использовать его вместо стандартного TextBoxFor.

В этом помощнике вы можете получить текст приглашения с помощью ModelMetadata.FromLambdaExpression, а затем вызвать TextBoxFor, используя объект пользовательских атрибутов html, созданный из метаданных.

1 голос
/ 22 августа 2016

Любой html-атрибут в виде бритвы можно добавить в HTML-помощник , назначив значение свойства в @html.control с помощью ключевого слова new {}, а затем определив атрибут, начиная с символа @, если вы используя зарезервированное ключевое слово в бритве, которое представляет атрибут html, такой как class, вам нужно добавить @ перед этим словом, так же, как движок Razor обрабатывает элементы HTML DOM, например:

 @Html.TextBoxFor(x => x.Name, new { @class = "form-control", placeholder = "Your Name" } )
0 голосов
/ 31 октября 2015

Несмотря на то, что вы, возможно, никогда этого не делаете, в качестве подтверждения концепции вы можете сделать следующее:

Модель:

[Required, Display(Description = "Type your note here...")]
public string Note { get; set; }

Вид:

@Html.TextAreaFor(x => x.Note, new { placeholder = ViewData.ModelMetadata
    .Properties.FirstOrDefault(x => x.PropertyName == "Note")?.Description })
0 голосов
/ 30 апреля 2013

Вы также можете создать свой собственный метод расширения HtmlHelper, чтобы сделать это, как описано в этой статье: http://mvcdiary.com/2012/09/28/create-a-custom-htmlhelper-textboxfor-to-display-label-text-as-placeholder-integrated-with-twitter-bootstrap/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...