gpt4 book ai didi

c# - 继承的类属性 `DisplayAttribute` 没有被覆盖?

转载 作者:太空宇宙 更新时间:2023-11-03 16:07:41 24 4
gpt4 key购买 nike

我有一个基类,它继承了另一个基类的属性,并添加了一个新的属性,如下所示:

public class DataSourceWithIntervalBase : DataSourceBase
{
[MaxLength(100)]
[Display(Name = "Interval")]
public virtual string Interval1 { get; set; }
}

DataSourceBase 没有什么特别之处,它只是有一些我需要允许用户编辑的属性。

但是,

DataSourceWithIntervalBase 进一步被其他类继承。除了用于 UI 目的的 Display 属性外,它们都非常相似。

例如,这是其中一个类:

public class SqlServerDataSource : DataSourceWithIntervalBase
{
public SqlServerDataSource()
{
FeedType = FeedType.SqlServer;
}

[Required]
[MaxLength(500)]
[Display(Name = "Connection String")]
public override string Url { get; set; }

[MaxLength(100)]
[Display(Name = "Table Name")]
public override string Interval1 { get; set; }
}

您可以看到我在这里覆盖了 2 个属性。 Url,在 DataSourceBase 中找到,Interval1,在 DataSourceWithIntervalBase 中找到。

使用此继承时似乎没有任何问题。它确实有效。但是,Display 属性不会被覆盖。 DataSourceBaseUrl 实际上没有,但即使在编辑器 View 中使用时也不会考虑。 Interval1 属性标记如下:

Interval

那么我怎样才能强制我的继承类正确地覆盖我的基类的 Display 属性呢?

最佳答案

我不知道这是否是最佳实践,但它确实有效。

如果没有其他答案可以改进/规避这个解决方案,我会坚持这个,并希望它能帮助其他人。

我对 DataSource View Models 的类型使用了 switch 语句,并转换了适当的类型以直接访问其 DisplayAttribute,如下所示:

@switch (Model.FeedType) // switch to cast correct Model Type in order to access proper DisplayAttribute for Interval1
{
case Model.FeedType.RSS:
break;
case Model.FeedType.XML:
@Html.LabelFor(m => ((XmlDataSource)m).Interval1)
break;
case Model.FeedType.SqlServer:
break;
case Model.FeedType.Excel2003:
@Html.LabelFor(m => ((Excel2003DataSource)m).Interval1)
break;
case Model.FeedType.InterLinkFeeder:
break;
case Model.FeedType.Atom:
break;
case Model.FeedType.Excel2007:
@Html.LabelFor(m => ((Excel2007DataSource)m).Interval1)
break;
case Model.FeedType.JSON:
@Html.LabelFor(m => ((JsonDataSource)m).Interval1)
break;
default:
break;
}

请记住,我跳过了各种类型,因为此 switch 语句位于不会用于这些类型的 EditorTemplate 中。

您可以轻松地将此解决方案用于您的特定情况。

关于c# - 继承的类属性 `DisplayAttribute` 没有被覆盖?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18703080/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com