У меня есть ситуация в моем веб-приложении 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 в корне неверен?