Как создать шаблон строки с сообщением проверки и водяным знаком в MVC 3 - PullRequest
0 голосов
/ 01 марта 2012

Я хотел бы создать шаблон для строки, который будет включать метку, текстовое поле с водяным знаком и сообщение для проверки формы регистрации. Кроме того, я хотел бы добавить уведомление (например, звездочка), что поле является обязательным при получении его из модели.

Пока что я создал файл string.cshtml в ~ / Views / Account / EditorTemplates, содержащий это:

<span class="editor-label>@Html.Label(ViewData.ModelMetadata.Watermark)</span>
<span class="editor-field">@Html.TextBox("", ViewData.TemplateInfo.FormattedModelValue, new { placeholder =  ViewData.ModelMetadata.Watermark })</span>
<span class="error_message">@Html.ValidationMessage(ViewData.ModelMetadata.PropertyName)</span>

Модель выглядит так:

    [Required]
    [DataType(DataType.Text)]
    [Display(Prompt = "First name")]
    public string FirstName { get; set; }

И ввиду этого я называю это следующим образом:

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

У кого-нибудь есть идеи, где я могу пойти не так?

Ответы [ 2 ]

1 голос
/ 01 апреля 2015

Андрей,

Ваша проблема с тем, что сообщение не отображается, это строка:

<span class="error_message">@Html.ValidationMessage(ViewData.ModelMetadata.PropertyName)</span>

Если вы посмотрите на визуализированный исходный код HTML, вы увидите что-то вроде следующего:

<span class="field-validation-error" data-valmsg-for="<className>.FirstName" data-valmsg-replace="true"></span>

Обратите внимание, что он включает класс в атрибут данных. Тем не менее, ubobtrusive не соответствует этому. То, что вам нужно, это просто:

<span class="field-validation-error" data-valmsg-for="FirstName" data-valmsg-replace="true"></span>

Для этого измените код в вашем редакторе на:

@Html.ValidationMessageFor(v => v)

Аналогично, чтобы сделать ваш код более легким для чтения, оба эти варианта также работают для вашего другого кода ...

@Html.LabelFor(v => v)
@Html.TextBoxFor(v => v, new { placeholder = ViewData.ModelMetadata.Watermark })
1 голос
/ 01 марта 2012

Ваш шаблон редактора должен называться Text.cshtml, а не String.cshtml, потому что вы используете атрибут [DataType(DataType.Text)].

Вы также можете указать пользовательское имя для шаблона редактора, используя атрибут UIHint:

[Required]
[DataType(DataType.Text)]
[Display(Prompt = "First name")]
[UIHint("Foo")]
public string FirstName { get; set; }

и теперь вы можете иметь ~/Views/Account/EditorTemplates/Foo.cshtml.

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