我记得有一段时间,我正在开发一个基于C#razor的网页。有一个响应属性,作为控制器和页面之间的一种管道。我不知道它叫什么,但它有一个有趣的属性 -
基本上它就像一个字典(字符串,对象),所以你可以通过任何名称转储任何名称,除非你像这样使用它:
ThingNameIDontRemember.name =无论
在添加了我想要的内容之后,我认为它们甚至出现在另一方面的intellisense自动完成中(与您对通用对象的期望不同)
这个类型叫什么,它是否也可以在mvc bundle之外使用?我可以在我目前的vb.net项目中使用类似的东西。
答案 0 :(得分:7)
我认为您正在寻找ViewBag
。
使用
ViewBag
属性可以动态地将控制器中的值共享到视图中。它是一个动态对象,这意味着它没有预定义的属性。您可以通过简单地将属性添加到属性来定义您希望ViewBag
拥有的属性。在视图中,您可以使用该属性的相同名称来检索这些值。
更一般地说,C#4使用dynamic
类型引入了动态类型 - 如果表达式的类型为dynamic
,则绑定(计算出名称的含义)直到执行时才会发生。例如:
dynamic d = "foo";
Console.WriteLine(d.Length); // Uses string.Length
d = new int[10];
Console.WriteLine(d.Length); // Uses the array Length
Console.WriteLine(d.Bang()); // Compiles, but will throw at execution time
对于一般抓斗,您可以使用ExpandoObject
:
dynamic expando = new ExpandoObject();
expando.Foo = 10;
expando.Bar = "Some string";
Console.WriteLine(expando.Foo); // 10
动态打字比这还要多,但希望这就是你要找的东西。