部分视图模型无法解析

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&lt;TModel&gt; 不会更改,并且在运行时 MVC 引擎无法根据null 值确定模型的类型。

【讨论】:

这是有道理的。我忘了添加其他东西,在上面的控制器操作中,我像这样初始化 FileLinks = new ModelB() 然后使用该模型返回视图。当视图返回时,Sp prop5 不再为空。代码:m.FileLines = new ModelB();返回视图(“索引”,m) 我认为这就是答案。

以上是关于部分视图模型无法解析的主要内容,如果未能解决你的问题,请参考以下文章

Resharper 无法解析母版页内的部分视图

无法在服务器上的部分视图中解析上传的图像路径

TemplateSyntaxError,无法解析剩余部分

无法使用视图名称 (django-rest-framework) 解析超链接关系的 URL

Django 模板错误:无法解析剩余部分

无法在swift 3中解析Json?