【问题标题】: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> 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)

所以模型不为空

【问题讨论】:

  • 请发布文件链接视图?

标签: asp.net-mvc views partial


【解决方案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)
    • 我认为这就是答案。
    猜你喜欢
    • 2013-02-17
    • 1970-01-01
    • 2015-12-05
    • 2014-03-01
    • 1970-01-01
    • 2016-06-13
    • 2020-01-11
    • 1970-01-01
    • 2011-04-03
    相关资源
    最近更新 更多