Почему мои отображаемые имена нарушают метки в шаблоне редактора?

Я использую цикл, как показано ниже, для отображения метки и редактора для каждого свойства в модели представления:

@{
    var properties = ViewData.ModelMetadata.Properties.Where(pm => pm.ShowForEdit && !pm.IsComplexType && !ViewData.TemplateInfo.Visited(pm));
}
    @foreach (var prop in properties)
    {
        <li>
            <div class="form-line">
                @{
        if (prop.HideSurroundingHtml)
        {
                    @Html.Editor(prop.DisplayName ?? prop.PropertyName)
        }
        else
        {
                    @Html.Label((prop.IsRequired ? "* " : "") + (prop.DisplayName ?? prop.PropertyName))
                    @Html.Editor(prop.PropertyName)
        }
                }
            </div>
        </li>
    }

И модель:

    [Required]
    [Display(Name = "Status")]
    [UIHint("DropDown", "MVC", "SelectListName", "StatusSelectList")]
    public Guid StatusId { get; set; }

    [Required]
    [Display(Name = "Emp Number")]
    public string RefNum { get; set; }

    [Required]
    public string Surname { get; set; }

Когда я использую отображаемое имя «Emp. No.», метка вообще не отображается. Когда я использую отображаемое имя «Emp. Number», отображается только метка «Number». Только когда я использую отображаемое имя «Emp Number» без точек, моя полная ожидаемая метка отображается. Что здесь происходит?


person ProfK    schedule 25.03.2012    source источник
comment
через что ты проходишь? метаданные?   -  person RPM1984    schedule 26.03.2012
comment
@ RPM1984 Да. Пожалуйста, посмотрите, теперь я добавил запрос для properties в свой код выше.   -  person ProfK    schedule 26.03.2012
comment
хорошо, я никогда не видел этого раньше. Почему вы хотите это сделать? Чего вы пытаетесь достичь? Выглядит довольно грязно   -  person RPM1984    schedule 26.03.2012
comment
@ RPM1984 На самом деле это не так уж и грязно. Чего я пытаюсь добиться, так это переопределить макет по умолчанию для EditorForModel.   -  person ProfK    schedule 26.03.2012


Ответы (1)


Вы используете неправильную перегрузку помощника Html.Label. Первый аргумент представляет собой выражение, которое будет указывать на редактор, так что атрибут for метки указывает на соответствующее поле ввода. Второй аргумент позволяет вам установить текст метки. Попробуйте так:

@Html.Label(prop.PropertyName, (prop.IsRequired ? "* " : "") + (prop.DisplayName ?? prop.PropertyName))
person Darin Dimitrov    schedule 26.03.2012
comment
Да, спасибо @Дарин. Это превращается в ускоренный курс по генерации HTML в MVC3. - person ProfK; 28.03.2012