我的模型如下:
型号:
public class Farm
{
public Animal Cow1 {get;set;}
public Animal Pig1 {get;set;}
}
public class Animal
{
[DisplayName("Animal Name")]
public string Name {get;set;}
}
查看:
@Html.LabelFor(m => m.Cow1.Name)
@Html.LabelFor(m => m.Pig1.Name)
我的问题是:
而不是"动物名称",我希望Cow1的名字标签是" Cow Name"和Pig1的名称标签为" Pig Name"。
有可能这样做吗?感谢。
感谢@devqon,这个建议可以解决我的问题。然而,我可以从属性中询问更多关于这样做吗?如下所示,是否存在类似属性" DisplayMetaData "表现?
public class Farm
{
[DisplayMetaData(typeof(CowMetaData))]
public Animal Cow1 {get;set;}
[DisplayMetaData(typeof(PigMetaData))]
public Animal Pig1 {get;set;}
}
public class Animal
{
[DisplayName("Animal Name")]
public string Name {get;set;}
}
public class CowMetaData
{
[DisplayName("Cow Name")]
public string Name {get;set;}
}
public class PigMetaData
{
[DisplayName("Pig Name")]
public string Name {get;set;}
}
我希望代码的编写方式与我们使用属性[ MetadataType ]的方式一样,MetaData是在单独的类中定义的,并且显示名称仍然可以由HtmlHelper LabelFor函数。但是[MetadataType]仅用于类而不是属性,所以我想出了这个问题。
感谢任何帮助。
答案 0 :(得分:1)
你能否修改你的类来实现继承来解决问题?例如:
public abstract class Animal
{
public abstract string Name { get; set; }
}
public class Cow : Animal
{
[Display(Name="Cow Name")]
public override string Name { get; set; }
}
public class Pig : Animal
{
[Display(Name = "Pig Name")]
public override string Name { get; set; }
}
public class Farm
{
public Cow Cow { get; set; }
public Pig Pig { get; set; }
}
答案 1 :(得分:0)
我认为这是合理的:
public class Farm
{
[DisplayName("Cow")]
public Animal Cow1 {get;set;}
[DisplayName("Pig")]
public Animal Pig1 {get;set;}
}
public class Animal
{
public string Name {get;set;}
}
并在cshtml中使用它(我知道asp能够自动执行此操作):
@Html.LabelFor(m => m.Cow1) @Html.LabelFor(m => m.Cow1.Name)