Как использовать DataAnnotations конкретного ViewModel вместо интерфейса в представлениях ASP.NET MVC? - PullRequest
0 голосов
/ 03 октября 2018

У меня есть ситуация в моем веб-приложении MVC, где я использую реализацию интерфейса в качестве моей модели представления.При рендеринге представление использует DataAnnotations интерфейса вместо конкретного класса.Мои viewModels:

 public interface IAnimalViewModel
{
    [Display(Name = "InterfaceVolume")]
    int Volume { get; set; }
    int NumberOfToes { get; }
}
public class DogViewModel : IAnimalViewModel
{
    [Display(Name = "BarkVolume")]
    public int Volume { get; set; }

    public int NumberOfToes
    {
        get { return 16; }
    }
}
public class CatViewModel : IAnimalViewModel
{
    [Display(Name = "MeowVolume")]
    public int Volume { get; set; }

    public int NumberOfToes
    {
        get { return 18; }
    }
}

Соответствующая часть моего взгляда:

@model IAnimalViewModel
<label asp-for="Volume"></label>
@Model.NumberOfToes

Результат:

InterfaceVolume 16

Iожидал, что отображаемая метка будет «BarkVolume», когда я передам DogViewModel моему представлению, но он отобразит «Volume», потому что вместо этого используются DataAnnotations из IAnimalViewModel.NumberOfToes показывают 16, как и ожидалось от DogViewModel объекта.

Есть ли способ заставить представление использовать взамен DataAnnotations класса, или мой подход к представлениям viewModels в корне неверен?

1 Ответ

0 голосов
/ 03 октября 2018

не уверен, почему вы используете интерфейс в представлении вместо этого

@model IAnimalViewModel
<label asp-for="Volume"></label>

попробуйте это в представлении с использованием DogViewModel

@Html.LabelFor(model => model.Volume)`

сейчас, если ваша модель IAnimalViewModel, вы можетенужно

@Html.LabelFor(model => (DogViewModel)model.Volume) 

// это пытается привести IAnimalViewModel к DogViewModel

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