不重复: MVC Razor 动态模型,“对象”不包含“属性名称”的定义
根据那里的答案,
根据 David Ebbo 的说法,您不能将匿名类型传递给动态类型视图,因为匿名类型被编译为内部类型。由于 CSHTML 视图被编译成一个单独的程序集,它不能访问匿名类型的属性。
为什么当部分视图位于“/Home/_Partial.cshtml”时,下面的代码 - 据称永远不会工作 - 像我预期的那样工作,但在移动到“/Shared/_Partial.cshtml”时突然停止工作?
使用 ASP.NET 4.5(和以前的版本),下面会生成文本“Hello, World!” 到网络浏览器:
~/Controllers/HomeController.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
namespace TestDynamicModel.Controllers
{
public class HomeController : Controller
{
public ActionResult Index()
{
return View();
}
}
}
~/Views/Home/Index.cshtml
@Html.Partial("_Partial", new { Text = "Hello, world!", ShouldRender = true } )
~/Views/Home/_Partial.cshtml
@model dynamic
@if (!Model.ShouldRender)
{
<p>Nothing to see here!</p>
}
else
{
<p>@Model.Text</p>
}
但是,当 _Partial.cshtml 移动到 ~/Views/Shared/_Partial.cshtml 时,_Partial.cshtml 中会引发以下错误(第 2 行):
'object' does not contain a definition for 'ShouldRender'
在调试器中检查模型后,我发现以下属性:
Model { Text = Hello, world!, ShouldRender = True }