【发布时间】:2012-01-04 15:42:01
【问题描述】:
我希望能够从我的视图中获取由相应控制器建立的匿名类型。根据this article 的说法,这种能力在 C# 4.0 中通过“动态”关键字成为可能。但是,当我尝试找到一个实际示例时,我会找到从“is possible”到“is not possible”的各种答案。
就我而言,我有一个控制器来创建它:
XElement headings = XElement.Parse(part.TagList);
var items = from heading in headings.Descendants("heading")
select new {
name = heading.Attribute("name").Value,
tags = heading.Attribute("tags").Value,
content = shapeHelper.List() //This is a dynamic object!!!
}; //can I add 'as dynamic;' here????
简而言之,如果没有静态类型,我的视图可以像这样简单地进入模型,那就太好了:
@{
//Currently this next line returns an error saying that
//'object' contains no method 'Count'
int foo = Model.items.Count();
//This 'foreach' works.
foreach(dynamic lineItem in Model.items){
//But this does not work. Gives another "'object' has no definition for 'name'"
<p>@lineItem.name</p> }
}
可能吗?
【问题讨论】:
-
Justin 下面的建议应该可行。我只是倾向于厌倦在 MVC 视图中使用
dynamic类型,因为出于某种原因,我总是不得不将我的对象转换为可用的东西(string、int等)以避免在使用动态类型时出错视图(即使使用ViewBag)。 -
问一个明显的 mvc-good-practices 问题 - 为什么不在这里使用视图模型(标准推荐)?为什么匿名类型成为一种要求,而不是填充的视图模型、强类型、捕获的编译时错误、不易受魔术字符串问题/错别字等影响?
标签: c# asp.net-mvc asp.net-mvc-3 dynamic anonymous-types