【问题标题】:Partial view with RenderPartial, model does not contain a definition带有 RenderPartial 的局部视图,模型不包含定义
【发布时间】:2014-01-04 19:24:32
【问题描述】:

我有一个返回视图的控制器。

在视图中,我渲染一个公共的共享局部视图,并将参数传递给它:

<div class="tab-pane" id="tab-sla">@{Html.RenderPartial(
        "./_sla",
        new
        {
            ContentTitle = "Service Level"
        });
    }
</div>

但是,每当在部分视图 _sla 中尝试访问属性 ContentTitle 时,它​​都会引发错误 'object' does not contain a definition for 'ContentTitle'

如果我使用@Model.ToString() 转储模型属性,它会显示{ ContentTitle = "Service Level" }

谁能告诉我我做错了什么以及如何解决这个问题?

【问题讨论】:

标签: asp.net asp.net-mvc-3 asp.net-mvc-4 razor


【解决方案1】:

这可能会有所帮助(取自 this SO 答案,感谢 Lucas):

根据 David Ebbo 的说法,您不能将匿名类型传递给 动态类型视图,因为匿名类型被编译为 内部的。由于 CSHTML 视图被编译成一个单独的程序集, 它不能访问匿名类型的属性。

您也可以在访问模型属性时尝试使用ViewData。有时对我有帮助:

<h1>@ViewData["ContentTitle"]</h1>

希望这会有所帮助。

【讨论】:

  • @JohnH 是的,因为我有一些额外的信息(可能有用)要分享。
  • @JohnH 这就是为什么我希望关闭这个问题 ;-) 不过,我提到的解决方法可能就足够了,因此答案是(我不知道作者是否想要选择普通模型类型)。
  • 谢谢,现在说得通了,最奇怪的是我在一个调用另一个局部视图的局部视图中做同样的事情,并且工作正常。我将在使用它之前创建一个模型,或者只使用@model string 并传入一个字符串(我刚刚做了一个解决方法)
  • @g18c,有关您遇到的异常的完整详细信息,请参阅我在链接问题中的回答。这是一个真正的陷阱!
  • 视图和局部视图在同一个程序集上。
【解决方案2】:

有关详细信息,请在此处查看问题和我的回答:

MVC Razor dynamic model, 'object' does not contain definition for 'PropertyName'

基本上,它停止工作的最可能原因是您在同一文件夹中有另一个视图,其模型类型不可解析

用损坏的模型类型更正有问题的视图,清理并重建解决方案,它应该可以再次工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多