Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/asp.net-mvc-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 可以列出<;动态>';是否将其传递到ViewBag并在视图中进行解释?_C#_Asp.net Mvc 3 - Fatal编程技术网

C# 可以列出<;动态>';是否将其传递到ViewBag并在视图中进行解释?

C# 可以列出<;动态>';是否将其传递到ViewBag并在视图中进行解释?,c#,asp.net-mvc-3,C#,Asp.net Mvc 3,使用ViewBag,我可以设置随机属性,并在视图中访问它们。但是,如果创建动态对象列表,则无法访问这些对象的属性。有没有办法做到这一点 以下是一个基本示例: 控制器代码: List<dynamic> Details = new List<dynamic>(); dynamic detail; detail = new ExpandoObject(); detail.serviceDate = DateTime.Now.ToString("MM/dd/yyyy"); det

使用ViewBag,我可以设置随机属性,并在视图中访问它们。但是,如果创建动态对象列表,则无法访问这些对象的属性。有没有办法做到这一点

以下是一个基本示例:

控制器代码:

List<dynamic> Details = new List<dynamic>();
dynamic detail;
detail = new ExpandoObject();
detail.serviceDate = DateTime.Now.ToString("MM/dd/yyyy");
detail.Charge = 100.01;
Details.Add(detail);

detail = new ExpandoObject();
detail.serviceDate = DateTime.Now.ToString("MM/dd/yyyy");
detail.Charge = 50;
Details.Add(detail);

ViewBag.Details = Details;
return View();
@foreach (dynamic detail in ViewBag.Details)
{
    <li>
        @String.Format("{0} - {1}", detail.serviceDate, detail.Charge)
    </li>
}
07-22-2015 - 100.01
07-22-2015 - 50
List Details=新列表();
动态细节=新{
serviceDate=DateTime.Now.ToString(“MM/dd/yyyy”),
费用=100.01
};
详细信息。添加(详细信息);
ViewBag.Details=详细信息;
返回视图();
查看代码:

List<dynamic> Details = new List<dynamic>();
dynamic detail;
detail = new ExpandoObject();
detail.serviceDate = DateTime.Now.ToString("MM/dd/yyyy");
detail.Charge = 100.01;
Details.Add(detail);

detail = new ExpandoObject();
detail.serviceDate = DateTime.Now.ToString("MM/dd/yyyy");
detail.Charge = 50;
Details.Add(detail);

ViewBag.Details = Details;
return View();
@foreach (dynamic detail in ViewBag.Details)
{
    <li>
        @String.Format("{0} - {1}", detail.serviceDate, detail.Charge)
    </li>
}
07-22-2015 - 100.01
07-22-2015 - 50
@foreach(ViewBag.Details中的动态细节){
  • @String.Format(“{0}-{1}”,detail.serviceDate,detail.Charge)
  • }
    我得到的例外是:

    “对象”不包含“serviceDate”的定义


    不过,在调试视图时,对象显然有一个名为“serviceDate”的变量。

    我不相信您可以使用这样的匿名类型。我非常确定您只能在创建对象的方法的范围内使用它们

    您可以使用反射从对象获取数据,但我不建议这样做。如果需要在方法范围之外使用对象,我将为其创建一个类,如下所示:

    class Detail
    {
        public DateTime ServiceDate { get; set; }
    
        public Decimal Charge { get; set; }
    }
    

    您可以创建expando对象,然后在视图中使用它,而不是创建匿名对象:

    dynamic detail = new ExpandoObject();
    detail.serviceDate = DateTime.Now.ToString("MM/dd/yyyy");
    detail.Charge = 100.01;
    

    谢谢你的安克尔。我面临着同样的问题,现在问题解决了

    创建ExpandoObject并将其添加到详细信息列表中

    例如:

    控制器代码:

    List<dynamic> Details = new List<dynamic>();
    dynamic detail;
    detail = new ExpandoObject();
    detail.serviceDate = DateTime.Now.ToString("MM/dd/yyyy");
    detail.Charge = 100.01;
    Details.Add(detail);
    
    detail = new ExpandoObject();
    detail.serviceDate = DateTime.Now.ToString("MM/dd/yyyy");
    detail.Charge = 50;
    Details.Add(detail);
    
    ViewBag.Details = Details;
    return View();
    
    @foreach (dynamic detail in ViewBag.Details)
    {
        <li>
            @String.Format("{0} - {1}", detail.serviceDate, detail.Charge)
        </li>
    }
    
    07-22-2015 - 100.01
    07-22-2015 - 50
    

    另一种方法是在视图顶部添加
    @model dynamic
    ,并在控制器中使用
    返回视图(详细信息)
    ,而不是查看包。

    您在这里使用dynamic的是什么?这已在另一个问题@starskythehutch中讨论过-谢谢。我到处搜索,但没有找到那篇文章。即使把它改成列表,也没用。除了创建一个完整的模型,还有什么方法可以得到我想要的结果吗?当我在视图中时,我能够以这种方式将数据传递给控制器,但我相信这是通过查询字符串实现的。没有办法完全保留对象。你可以用反射来获取物体的信息,但这并不完美。我想星空上面的评论就是我想要的。谢谢你的意见!如果您对这种方法有任何问题,您应该尝试为对象创建一个类。