我有一个模型A,它有一个属性是另一个模型类型,B。我有一个与A绑定的视图。我想将一个局部视图添加到A,它采用类型B的模型。是我的代码
public class ModelA
{
public bool Prop1 {get;set;}
public bool Prop2 {get; set;}
public Dictionary<int, string> Prop3{get; set;}
public int Prop4 {get; set;}
public ModelB Prop5 { get; set; }
public ModelA ()
{
Prop5 = null;
... more code ...
}
}
//This view is tied to ModelA
@using (Html.BeginForm("CreateReport", "Home", FormMethod.Post))
{
some markup
}
//this is the problem
@Html.Partial("FileLinks", Model.Prop5) //This line throws an error
错误:传入字典的模型项的类型为“ModelA”,但此字典需要“ModelB”类型的模型项
如果我将其更改为@Html.Partial("FileLinks", new ModelB())
为什么原始代码不起作用?该属性属于ModelB。
感谢任何帮助!
更新:我忘了从控制器中添加一些代码
m.FileLinks = new ModelB() 返回视图(“索引”,m)
因此模型不为空
答案 0 :(得分:4)
我刚试过这个,如果Prop5为null,我会得到同样的错误。如果我将Prop5初始化为新的ModelB,那么它可以工作。
错误不是很清楚(你会认为这会引发NullReferenceException)。
我也试过这个:
@Html.Parial("FileLinks",null)
并发生相同的错误。这似乎与this
相同答案 1 :(得分:0)
我认为这里发生的是
当您渲染这样的局部视图时,ViewDataDictionary
和视图上下文将传递到局部视图
所以当ModelB
为null时,ViewDataDictionary<TModel>
没有改变,并且在运行时,MVC引擎无法从null
值确定模型的类型。