Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# MVC.Net视图模型嵌套列表_C#_Asp.net Mvc_Model View Controller_Architecture - Fatal编程技术网

C# MVC.Net视图模型嵌套列表

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

我有一个抽象类和从该类继承的其他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
{
  [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)
}