C# ModelMetadata.ContainerType返回null
我想写一个HTML助手方法。在我的助手方法中,我想知道主模型的类型(如果有的话)。为了实现这一点,我使用了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<
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; }
}