我在MVC Web应用程序中遇到一种情况,我正在使用接口的实现作为ViewModel。渲染时,视图使用接口的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
当我将DogViewModel
传递给View时,我希望呈现的标签为“ BarkVolume”,但它呈现为“ Volume”,因为改用了IAnimalViewModel的DataAnnotations。与DogViewModel
对象所期望的一样,NumberOfToes显示16。
有没有办法让视图使用类的DataAnnotations代替,或者我认为viewModels的方法根本有缺陷?
答案 0 :(得分:0)
不确定为什么要在视图中使用界面 代替这个
@model IAnimalViewModel
<label asp-for="Volume"></label>
使用DogViewModel在视图中尝试
@Html.LabelFor(model => model.Volume)`
现在您的模型是否为IAnimalViewModel 你可能需要
@Html.LabelFor(model => (DogViewModel)model.Volume)
//这试图将IAnimalViewModel转换为DogViewModel