2012-03-01 2 views
0

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

До сих пор я создал файл string.cshtml в ~/Views/счета/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) 

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

ответ

1

Ваш шаблон шаблона должен быть вызван 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.

+0

Работайте просто отлично, спасибо. ;) Есть ли у вас какие-либо идеи, как добавить уведомление о требуемом поле? – Andree

1

Андрее,

Ваша проблема не выдавалось сообщение эта строка:

<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 })