部分视图模型无法解决

时间:2013-05-16 16:40:59

标签: asp.net-mvc views partial

我有一个模型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)

因此模型不为空

2 个答案:

答案 0 :(得分:4)

我刚试过这个,如果Prop5为null,我会得到同样的错误。如果我将Prop5初始化为新的ModelB,那么它可以工作。

错误不是很清楚(你会认为这会引发NullReferenceException)。

我也试过这个:

@Html.Parial("FileLinks",null)

并发生相同的错误。这似乎与this

相同

答案 1 :(得分:0)

我认为这里发生的是

当您渲染这样的局部视图时,ViewDataDictionary和视图上下文将传递到局部视图
所以当ModelB为null时,ViewDataDictionary<TModel>没有改变,并且在运行时,MVC引擎无法从null值确定模型的类型。