部分视图模型无法解析
Posted
技术标签:
【中文标题】部分视图模型无法解析【英文标题】:Partial View model doesn't resolve 【发布时间】:2013-05-16 16:40:58 【问题描述】:我有一个模型 A,它具有另一个模型类型 B 的属性。我有一个与 A 相关联的视图。我想向 A 添加一个局部视图,它采用 B 类型的模型。这个是我的代码
public class ModelA
public bool Prop1 get;set;
public bool Prop2 get; set;
public Dictionary<int, string> Prop3get; 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)
所以模型不为空
【问题讨论】:
请发布文件链接视图? 【参考方案1】:我刚试过这个,如果 Prop5 为空,我会得到同样的错误。如果我将 Prop5 初始化为新的 ModelB,那么它可以工作。
错误不是很清楚(你会认为这会抛出 NullReferenceException)。
我也试过这个:
@Html.Parial("FileLinks",null)
并发生相同的错误。这似乎和this是同一个问题
【讨论】:
【参考方案2】:我认为这里发生的是
当您渲染像这样的局部视图时,ViewDataDictionary
和视图上下文被传递给局部视图
因此,当ModelB
为空时,ViewDataDictionary<TModel>
不会更改,并且在运行时 MVC 引擎无法根据null
值确定模型的类型。
【讨论】:
这是有道理的。我忘了添加其他东西,在上面的控制器操作中,我像这样初始化 FileLinks = new ModelB() 然后使用该模型返回视图。当视图返回时,Sp prop5 不再为空。代码:m.FileLines = new ModelB();返回视图(“索引”,m) 我认为这就是答案。以上是关于部分视图模型无法解析的主要内容,如果未能解决你的问题,请参考以下文章