System.InvalidCastException迭代Viewdata
我需要替换代码
"<%=Html.DropDownList("Part", (SelectList)ViewData["Parts"])%>
由于某种原因以下列方式下拉。
<select> <% foreach (Hexsolve.Data.BusinessObjects.HSPartList item in (IEnumerable<Hexsolve.Data.BusinessObjects.HSPartList>)ViewData["Parts"])
{ %>
<option value="<%=item.Id %>">
<%=item.PartName %>
<%=item.IssueNo %></option>
<% } %>
</select>
我收到将SelectedList转换为IEnumerable的错误
错误:无法将类型为“System.Web.Mvc.SelectList”的对象强制转换为“System.Collections.Generic.IEnumerable`1 [Hexsolve.Data.BusinessObjects.HSPartList]”。
这是迭代viewdata []的正确方法吗?请帮我解决这个问题。
答案 0 :(得分:0)
抱歉,我之前的回答不正确。
我认为问题在于GetEnumerator
会返回IEnumerator<SelectListItem>
,而不是您要访问的IEnumerator<Hexsolve.Data.BusinessObjects.HSPartList>
。
我建议以下内容应该有效:
<% foreach (SelectListItem item in (SelectList)ViewData["Parts"])
{ %>
<option value="<%= item.Value %>"><%= item.Text %></option>
<% } %>
如果您需要在PartName
属性中连接IssueNo
和Text
,您可以在构建选择列表时执行此操作。
所以你最终会得到类似的东西:
public class Part
{
public int Id { get; set; }
public int IssueNo { get; set; }
public string PartName { get; set; }
}
和
var parts = new List<Part>{
new Part { Id = 1, IssueNo = 1, PartName = "Spanner" },
new Part { Id = 2, IssueNo = 1, PartName = "Hammer" }
};
var selectList = new SelectList(
parts.Select(p =>
new { Id = p.Id,
Name = p.PartName + " " + p.IssueNo.ToString()}),
"Id",
"Name");
foreach (var item in selectList)
{
Console.WriteLine(item.Value);
Console.WriteLine(item.Text);
}
/*
Output:
1
Hammer 1
2
Spanner 1
*/
希望有所帮助!