不重复:MVC Razor dynamic model, 'object' does not contain definition for 'PropertyName'
根据那里的答案,
根据David Ebbo的说法,你不能将匿名类型传递给 动态类型视图,因为匿名类型被编译为 内部。由于CSHTML视图被编译成单独的程序集, 它无法访问匿名类型的属性。
为什么下面的代码 - 据说应该永远不会工作 - 按照我预期的那样工作,当部分视图位于“/Home/_Partial.cshtml”时,但当移动到“/Shared/_Partial.cshtml时突然停止工作“?
使用ASP.NET 4.5(及以前的版本),以下内容生成“Hello,World!”文本。到网络浏览器:
〜/控制器/ 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();
}
}
}
〜/查看/主页/ Index.cshtml
@Html.Partial("_Partial", new { Text = "Hello, world!", ShouldRender = true } )
〜/查看/主页/ _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时,我找到以下属性:
Model { Text = Hello, world!, ShouldRender = True }
答案 0 :(得分:1)
虽然问题与ASP.NET MVC的行为有关,而且我知道解决方法,但我不确定每个人都是。对于只想让代码工作的人来说,这是一种解决方法:Dynamic Anonymous type in Razor causes RuntimeBinderException
答案 1 :(得分:1)
我找到了这个答案:https://stackoverflow.com/a/21633464/605067是我的错误的解决方案,它与你的错误有着相同的症状。错误消息是:
'object' does not contain a definition for 'property'
,这是以与您一样的方式将匿名对象传递给{{@ Html.Partial}}的结果。
如该答案中所述,将匿名对象传递到部分视图是完全有效的,而那些不的视图需要包含{{@model dynamic}} - 事实上你正在创建一些如果使用动态模型,则会产生不必要的开销。
真正的问题是此错误消息具有误导性,至少在我的情况下如此。问题是我在同一目录中有其他视图文件没有正确编译,它似乎抛出了视图编译器。在其他SO帖子中提供的修复工作,即设置* .csproj propery
<MvcBuildViews>true</MvcBuildViews>
为true,然后修复我的视图中的所有编译错误。修复它们之后,我能够在局部视图中绑定到匿名对象。
答案 2 :(得分:-6)
要使用dynamic
类型,您需要引用Microsoft.CSharp
程序集。检查项目的参考文献。