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