Почему атрибут Display (Name = "") игнорируется в одной из моих моделей представления, в то время как он работает в других моих моделях в ASP. NET MVC5? - PullRequest
0 голосов
/ 10 февраля 2020

У меня есть viewmodel BeerNamePartialVM, у которого есть свойство с атрибутом [Display (Name = "")], которое, похоже, не работает. Я также включил мою базовую модель, которая также имеет свойство с атрибутом [Display (Name = "")], который работает:

public class BeerNamePartialViewModel : IPartialPropertySearch
{
    [Required(ErrorMessage = "This field is required")]
    [Display(Name = "Name or partial name")]
    //[DisplayName("Name or partial name")]
    public string PartialName { get; set; }
    ...
}

public class BierProperties
{
    [Required, StringLength(50), Display(Name = "Name")]
    public string Naam { get; set; }
    ...
}

Два выделенных текста генерируются с помощью показанных функций DisplayNameFor HtmlHelper ниже:

@model MVCBierApplication.Interfaces.IPartialPropertySearch
@Html.DisplayNameFor(f => f.PartialName)
@Html.EditorFor(f => f.PartialName)
@Html.ValidationMessageFor(f => f.PartialName)
...

@{Beer emptyModel = new Bier();}
@if (Model.Results != null && Model.Results.Count() != 0)
{
    <thead>
        <tr>
            <td>@Html.DisplayNameFor(h => Model.emptyModel.Naam</td>
            ...
        </tr>
        ...

emptyModel - это пустая модель типа Beer, которую я использую для построения заголовка таблицы. Это было необходимо, потому что мое представление имеет интерфейс IPartialPropertySearch в качестве модели, который возвращает результаты в IEnumerable типа Object вместо Beer. Это было сделано, потому что я хочу повторно использовать свой код для моделей, отличных от Beer.

Результат выглядит следующим образом (это мой первый вопрос, поэтому у меня не было достаточно репутации для отображения изображений в посте):

printscreen of my result

Обратите внимание на выделенные метки. Кажется, что метка над текстовым полем игнорирует атрибут [Display] его свойства, а метка в заголовке таблицы работает, как и ожидалось.

Сначала я также попытался использовать [DisplayName ("name")], сначала сам по себе, а затем даже вместе с [Display (Name =)], но ни один из них не работает. Я перезапустил свой сервер IIS, очистил кеш браузера и запустил приложение в четырех разных браузерах, каждый из которых дает одинаковый результат.

Атрибут [Обязательный] работает, когда я отправляю форму без ввода имя, показывается сообщение об ошибке, установленное в теге [required]. Единственными свойствами, которые игнорируются, являются те, которые изменяют имя:

printscheen with errormessage

Я также включил ссылку в репозиторий проекта на случай, если мои изображения не было достаточно ясно, или если вы хотите проверить это самостоятельно. Некоторые части могут быть на голландском языке, но я думаю, что это должно быть достаточно ясно. Также в хранилище включен файл SQL для воссоздания базы данных, которую я использую.

Спасибо за ваше время.

1 Ответ

1 голос
/ 10 февраля 2020

Я думаю, это потому, что ваша модель ссылается на интерфейс, а не на класс. @model MVCBierApplication.Interfaces.IPartialPropertySearch изменить на @model MVCBierApplication.Models.BeerNamePartialViewModel

...