4

我有一个模型 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() return View("Index", m)

所以模型不为空

4

2 回答 2

4

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

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

我也试过这个:

@Html.Parial("FileLinks",null)

并发生同样的错误。这似乎与此问题相同

于 2013-05-16T17:02:27.813 回答
0

我认为这里发生的是

当您渲染像这样的局部视图时ViewDataDictionary,视图上下文被传递给局部视图
,因此当它ModelB为 null时,ViewDataDictionary<TModel>它不会更改,并且在运行时 MVC 引擎无法从null值确定模型的类型。

于 2013-05-16T17:21:40.303 回答