我试图在ViewData [“element”]上循环以构建一个 数组
错误读取无法将对象转换为字符串[]
foreach(var p in (IEnumerable<string>)ViewData["element"] as Array)
{
string[] workbookIDsLinks = p;
}
vuiewdat来自
ViewData["element"] = names.Cast<XmlNode>().Select(e => e.Attributes["id"].Value);
任何帮助都会很棒
答案 0 :(得分:1)
来自MSDN:
如果将数组强制转换为Array类型,则结果是对象,而不是数组
所以,你有一个对象引用,即使你明确要求Array
!
不是将IEnumerable<string>
(或IEnumerable<anything>
)存储在ViewData
中,只需在存储之前转换为数组或列表,方法是在结尾处添加ToList()
。你的任务。然后你可以更容易地在另一端处理它。
在您的情况下,我不确定names
的类型,因此我不确定您需要做什么才能将结果转换为string
列表。
答案 1 :(得分:0)
IEnumerable<string>
,因为它可能会被懒惰地执行(您可以搜索延迟执行以了解更多信息),此时数据源可能无效(数据库连接)关闭,XML文件关闭等)。而是使用ToArray()
来实现您的碰撞。foreach
,因为元素已经是元素的集合; 在您的控制器中:
ViewData["element"] = names
.Cast<XmlNode>()
.Select(e => e.Attributes["id"].Value)
.ToArray();
在您看来:
var workbookIDsLinks = ViewData["element"] as string[];
答案 2 :(得分:0)
尝试使用
ViewData["element"] = sitenames
.Cast<XmlNode>()
.Select(e => new KeyValuePair<string,string>(e.Attributes["id"].Value, e.Attributes["name"].Value));