Html System.InvalidCastException遍历Viewdata

Html System.InvalidCastException遍历Viewdata,html,asp.net-mvc,drop-down-menu,html-helper,Html,Asp.net Mvc,Drop Down Menu,Html Helper,System.InvalidCastException遍历Viewdata 我需要替换代码 "<%=Html.DropDownList("Part", (SelectList)ViewData["Parts"])%> ” 出于某种原因,以以下方式进行下拉 <select> <% foreach (Hexsolve.Data.BusinessObjects.HSPartList item in (IEnumerable<Hexsolve.Data.Busi

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 %>
                &nbsp;&nbsp;&nbsp;
                <%=item.IssueNo %></option>
            <% } %>
        </select>

将SelectedList转换为IEnumerable时出错)

错误:无法将类型为“System.Web.Mvc.SelectList”的对象强制转换为类型为“System.Collections.Generic.IEnumerable`1[Hexsolve.Data.BusinessObjects.HSPartList]”


这是迭代查看viewdata[]的正确方法吗?请帮助我解决这个问题。

对不起,我之前的回答不正确

我认为问题在于
GetEnumerator
返回的是
IEnumerator
,而不是您试图访问的
IEnumerator

我建议采取以下措施:

<% foreach (SelectListItem item in (SelectList)ViewData["Parts"])
{ %>
    <option value="<%= item.Value %>"><%= item.Text %></option>
<% } %>

var parts=新列表{
新零件{Id=1,IssueNo=1,PartName=“扳手”},
新零件{Id=2,IssueNo=1,PartName=“Hammer”}
};
var selectList=new selectList(
部分。选择(p=>
新的{Id=p.Id,
Name=p.PartName+“”+p.IssueNo.ToString()}),
“身份证”,
“名称”);
foreach(选择列表中的变量项)
{
Console.WriteLine(项值);
Console.WriteLine(item.Text);
}
/* 
输出:
1.
锤子1
2.
扳手1
*/

希望这能有所帮助!

如果您还有其他问题,您应该将其添加为注释或创建新问题。您的问题已完全更改,这意味着我下面的回答毫无意义。我已经为您提供了一个完整的问题答案。如果您不想使用它,则可以,但不要更改问题。对不起,我要把qst换成旧的qst。
 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
   */