首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ExpandoObject、匿名类型和Razor

ExpandoObject、匿名类型和Razor
EN

Stack Overflow用户
提问于 2011-06-24 22:27:16
回答 4查看 8.6K关注 0票数 5

我想使用ExpandoObject作为ViewPage<dynamic>类型的Razor视图的视图模型。当我这样做的时候,我得到一个错误

代码语言:javascript
复制
ExpandoObject o = new ExpandoObject();
o.stuff = new { Foo = "bar" };
return View(o);

我能做些什么来让它工作呢?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-06-24 23:12:12

你可以使用这个问题中提到的扩展方法来实现:

Dynamic Anonymous type in Razor causes RuntimeBinderException

因此,您的控制器代码将如下所示:

代码语言:javascript
复制
dynamic o = new ExpandoObject();
o.Stuff = new { Foo = "Bar" }.ToExpando();

return View(o);

然后是你的观点:

代码语言:javascript
复制
@model dynamic

@Model.Stuff.Bar
票数 15
EN

Stack Overflow用户

发布于 2011-09-16 00:12:15

使用开源的Dynamitey (在nuget中),你可以用一个非常简单的clean syntax来绘制ExpandoObjects的图形;

代码语言:javascript
复制
  dynamic Expando = Build<ExpandoObject>.NewObject;

  var o = Expando (
      stuff: Expando(foo:"bar")
  );

  return View(o);
票数 4
EN

Stack Overflow用户

发布于 2011-06-24 23:07:07

我承认,“奶奶的想法是对的。”然而,这仍然是修改概念的一种方法。

编辑

你必须给.stuff一个类型,因为dynamic必须知道它在处理什么类型的对象。

当您将.stuff设置为匿名类型时,它就变成了内部类型,因此@model dynamic在这里帮不上忙

代码语言:javascript
复制
ExpandoObject o = new ExpandoObject();
o.stuff = MyTypedObject() { Foo = "bar" };
return View(o);

当然,还有MyTypedObject

代码语言:javascript
复制
public class MyTypedObject
{
    public string Foo { get; set; }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6469224

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档