[英]C# Get child property from the item of Parent Collection
我正在使用ASP.NET MVC。 我有一個父母:
public class ReportFilterBuilderStruct
{
public string PropName { get; set; }
public string ClassName { get; set; }
public string SubListName { get; set; }
//public virtual string SecondaryPropName { get; set; }
public ReportFilterBuilderStruct(string inpPropName, string inpClassName, string inpSubListName)
{
PropName = inpPropName;
ClassName = inpClassName;
SubListName = inpSubListName;
}
}
和一個孩子:
public class DateReportFilterBuilderStruct : ReportFilterBuilderStruct
{
public string SecondaryPropName { get; set; }
public DateReportFilterBuilderStruct(string inpPropName, string inpSecondaryPropName, string inpClassName, string inpSubListName) : base(inpPropName, inpClassName, inpSubListName)
{
SecondaryPropName = inpSecondaryPropName;
}
}
}
在我看來,它將用於存儲有關模型類屬性的一些數據。 editorListProp
將同時存儲ReportFilterBuilderStruct
和DateReportFilterBuilderStruct
,這就是為什么它是父類對象的List
。
var editorListProp = new List<NTStock.Models.ReportFilterBuilderStruct>();
現在我要訪問它們:
if (subItem.GetType() == typeof(NTStock.Models.ReportFilterBuilderStruct))
{
<div class="row align-items-center">
@Html.DisplayName(subItem.PropName)
</div>
<div class="row align-items-center mb-2">
@Html.Editor(subItem.PropName, "", new { htmlAttributes = new { @class = subItem.ClassName } })
</div>
}
else
{
<div class="row align-items-center">
@Html.DisplayName(subItem.PropName)
</div>
<div class="row align-items-center mb-2">
<div class="col-6">
From:
@Html.Editor(subItem.PropName, "", new { htmlAttributes = new { @class = subItem.ClassName } })
</div>
<div class="col-6">
Till:
@Html.Editor(subItem.SecondaryPropName, "", new { htmlAttributes = new { @class = subItem.ClassName } })
</div>
</div>
}
因此,關鍵是,即使我確保當前subItem
的定義類型為DateReportFilterBuilderStruct
,我也無法訪問我的SecondaryPropName
。
您必須將subItem
為DateReportFilterBuilderStruct
,例如:
((DateReportFilterBuilderStruct)subItem).SecondaryPropName
這種方法可以在動態類型的語言(如Python)中使用,但不適用於C#。 您的列表的類型為List<ReportFilterBuilderStruct>
。 當您從列表中訪問某個項目,如list[0]
你回來類型的對象ReportFilterBuilderStruct
,即使你存儲在DateReportFilterBuilderStruct
那里GetType()
正確返回DateReportFilterBuilderStruct
。
在else
分支中,您首先必須將項目轉換為DateReportFilterBuilderStruct
:
else
{
@{ var dateReport = (DateReportFilterBuilderStruct)subItem; }
<div class="row align-items-center">
@Html.DisplayName(dateReport.PropName)
</div>
<div class="row align-items-center mb-2">
<div class="col-6">
From:
@Html.Editor(dateReport.PropName, "", new { htmlAttributes = new { @class = dateReport.ClassName } })
</div>
<div class="col-6">
Till:
@Html.Editor(dateReport.SecondaryPropName, "", new { htmlAttributes = new { @class = dateReport.ClassName } })
</div>
</div>
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.