C# ModelMetadata.ContainerType返回null

C# ModelMetadata.ContainerType返回null,c#,asp.net,asp.net-mvc,asp.net-mvc-5,html-helper,C#,Asp.net,Asp.net Mvc,Asp.net Mvc 5,Html Helper,我想写一个HTML助手方法。在我的助手方法中,我想知道主模型的类型(如果有的话)。为了实现这一点,我使用了htmlHelper.ViewData.ModelMetadata.ContainerType,但当在模板视图或模型为集合项的局部视图中调用我的助手时,我找不到任何方法。在本例中,htmlhelp.ViewData.ModelMetadata.ContainerType返回null 示例模型: public class MyItemCollection { public List<

我想写一个HTML助手方法。在我的助手方法中,我想知道主模型的类型(如果有的话)。为了实现这一点,我使用了
htmlHelper.ViewData.ModelMetadata.ContainerType
,但当在模板视图或模型为集合项的局部视图中调用我的助手时,我找不到任何方法。在本例中,
htmlhelp.ViewData.ModelMetadata.ContainerType
返回null

示例模型:

public class MyItemCollection
{
   public List<MyItemContainer> Collection { get; set; }
}
示例视图:

@model Test.MyItemCollection

@for(int i = 0; i < Model.Collection.Count; i++)
{
  @Html.EditorFor(m=>m.Collection[i])
}

我认为应该为
MyItemCollection
创建一个空构造函数,然后初始化
Collection
属性

如果该元素没有被另一个过程初始化,它将导致
NULL
,这反过来可能会导致您遇到与反射相关的问题(即:查找
ViewData.ModelMetadata.ContainerType

我说,自己初始化属性。见下文

public class MyItemCollection
{
     // added a constructor, so we could initialize Collection.
     public MyItemCollection()
     {
         this.Collecion = new List<MyItemContainer>();
     }

     public List<MyItemContainer> Collection { get; set; }
}
公共类MyItemCollection
{
//添加了一个构造函数,因此我们可以初始化集合。
公共MyItemCollection()
{
this.Collecion=新列表();
}
公共列表集合{get;set;}
}

您是否在操作中将MyItemContainer上的实例传递给视图?请在操作中显示代码。具体来说,返回视图(模型)的位置可能已过期,但可能仍然有效。您好,@GlennFerrie。是,我正在传递MyItemCollection的一个实例,该实例的Collection属性包含项的实例。我编辑了我的问题。取项目是什么?考虑改变FETCH项返回InEdaby并用AddRange来填充列表(FoTigEMSE());谢谢@glenn我尝试了您的解决方案,并创建了一个构造函数来初始化
集合
,但结果没有改变。仍然是“ViewData.ModelMetadata.ContainerType”返回null。
public ActionResult Index()
{
   var m = new MyItemCollection();
   //Fetching items from Business Logic
   m.Collection = FetchItems();
   return View(m);
}
public class MyItemCollection
{
     // added a constructor, so we could initialize Collection.
     public MyItemCollection()
     {
         this.Collecion = new List<MyItemContainer>();
     }

     public List<MyItemContainer> Collection { get; set; }
}