C# MVC.Net视图模型嵌套列表
我有一个抽象类和从该类继承的其他3个类:-C# MVC.Net视图模型嵌套列表,c#,asp.net-mvc,model-view-controller,architecture,C#,Asp.net Mvc,Model View Controller,Architecture,我有一个抽象类和从该类继承的其他3个类:- public abstract class AbstractTask { [Key] public int ID {get; set;} [DisplayName("Featured Task")] public bool Featured { get; set; } // various other properties } public class HighLevelTask : AbstractTask { [Displ
public abstract class AbstractTask
{
[Key]
public int ID {get; set;}
[DisplayName("Featured Task")]
public bool Featured { get; set; }
// various other properties
}
public class HighLevelTask : AbstractTask
{
[DisplayName("Workstream Description")]
public String Workstream { get; set; }
public virtual ICollection<MidLevelTask> MidLevelTasks { get; set; }
}
public class MediumLevelTask : AbstractTask
{
public int HighLevelTaskID { get; set; }
public virtual ICollection<DetailLevelTask> DetailLevelTasks { get; set; }
}
public class DetailLevelTask : AbstractTask
{
public int MidLevelTaskID { get; set; }
}
也许我应该有一个复合模型来表示特征任务?还是有更好的办法?有什么建议吗?我建议使用“局部视图”来呈现“特色任务”的嵌套列表 此外,请尝试首先关注视图模型。您的视图模型中可能有一个“特色任务”集合,并将这些集合传递给要渲染的局部视图。以下是一些可能有帮助的链接: (一)
2) 您可以使用LINQ投影检索嵌套项:
var featuredItems = from hl in context.HighLevelTasks where hl.Featured == true
select new
{
MidLevelTasks = from md in context.MidLevelTask where md.MidLevelTaskID = h1.TaskID,
DetailLevelTasks = from ll in context.DetailLevelTask where ll.LowLevelTaskID = md.MidLevelTaskID
};
也可以使用编辑器模板渲染嵌套视图:
主要观点:
foreach(item in Model.HighLevelTasks)
{
@Html.EditorFor(item);
}
高级任务视图:
<!-- HTML here to render the parent record -->
foreach(item in Model.MidLevelTasks)
{
@Html.EditorFor(item)
}
foreach(Model.MidLevelTasks中的项)
{
@Html.EditorFor(项目)
}
…在相似的模式下,为中间和细节级任务创建编辑器模板。
我会创建一个VIEW模型,更多代码,但是更可取的是,最好考虑一个“局部视图”来呈现“特写任务”的嵌套列表。此外,请尝试首先关注视图模型。您的视图模型中可能有一个“特色任务”集合,并将这些集合传递给要呈现的局部视图。@Gordon,关于我的答案有什么反馈吗?<!-- HTML here to render the parent record -->
foreach(item in Model.MidLevelTasks)
{
@Html.EditorFor(item)
}