C# 使用匿名对象创建列表

C# 使用匿名对象创建列表,c#,asp.net-mvc-3,C#,Asp.net Mvc 3,我尝试的是添加一些虚拟记录,我想在ASP.NETMVC3视图中使用这些记录为一些实验提供数据。我试试这个: var dummyData = new[] { new {Row = 1, Col = 1, IsRequired = true, QuestionText = "Yes?", FieldValue = "int"}, new {Row = 1, Col = 2, IsRequired = true

我尝试的是添加一些虚拟记录,我想在ASP.NETMVC3视图中使用这些记录为一些实验提供数据。我试试这个:

var dummyData = new[]
            {
                new  {Row = 1, Col = 1, IsRequired = true, QuestionText = "Yes?", FieldValue = "int"},
                new  {Row = 1, Col = 2, IsRequired = true, QuestionText = "Yes?", FieldValue = "int"},
                new  {Row = 2, Col = 1, IsRequired = true, QuestionText = "No?", FieldValue = "string"},
                new  {Row = 3, Col = 1, IsRequired = false, QuestionText = "No?", FieldValue = "string"}
            }.ToList();
            ViewBag.Header = dummyData;
但是,当我尝试使用视图中的数据时:

@{
          foreach (var item in ViewBag.Header)
          {

              <tr><td>@item.QuestionText</td><td>@item.FieldValue</td></tr>

          }
       }
@{
foreach(ViewBag.Header中的变量项)
{
@项目。QuestionText@item.FieldValue
}
}

我收到此错误-
“对象”不包含“QuestionText”的定义。
。我认为我创建列表的方式有问题,但不是100%确定。

将您的
foreach
定义更改为:

@{ foreach (dynamic item in ViewBag.Header) {

问题是它们是匿名类,因此需要用作
动态
类,以便CLR可以在运行时延迟绑定对象。

匿名类型是从中声明它的作用域的本地类型。在类型声明的范围之外,您将不容易从中获取属性

我建议使用一个元组,或者只是为数据创建一个简单的POCO对象

var dummyData = new[]
        {
            Tuple.Create(1, 1, true, "Yes?", "int"),
        }.ToList();
        ViewBag.Header = dummyData;
var dummyData=新列表
{
新建{Row=1,Col=1,IsRequired=true,QuestionText=“Yes?”,FieldValue=“int”},
新建{Row=1,Col=2,IsRequired=true,QuestionText=“Yes?”,FieldValue=“int”},
新建{Row=2,Col=1,IsRequired=true,QuestionText=“No?”,FieldValue=“string”},
新建{Row=3,Col=1,IsRequired=false,QuestionText=“No?”,FieldValue=“string”}
};
ViewBag.Header=dummyData;

这应该可以解决问题。

我建议您不要太依赖匿名对象和查看包。当它们被强烈的类型关联时,情况会好得多。。。我建议使用一个元组类。为什么不改用viewmodel呢?请参阅我的创建viewmodel=>我正在动态学习的示例。我必须检查一下
viewmodel
到底能为我做些什么,而且我以前在Windows窗体应用程序中有过大量使用匿名对象的经验,这很好,所以我决定遵循这条路线。这不是我真正想要的,而是最接近某种解决方案的。
var dummyData = new List<dynamic>
        {
            new  {Row = 1, Col = 1, IsRequired = true, QuestionText = "Yes?", FieldValue = "int"},
            new  {Row = 1, Col = 2, IsRequired = true, QuestionText = "Yes?", FieldValue = "int"},
            new  {Row = 2, Col = 1, IsRequired = true, QuestionText = "No?", FieldValue = "string"},
            new  {Row = 3, Col = 1, IsRequired = false, QuestionText = "No?", FieldValue = "string"}
        };
        ViewBag.Header = dummyData;