System.InvalidCastException итерация по Viewdata - PullRequest
1 голос
/ 19 января 2011

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>

Iполучаю ошибку при преобразовании SelectedList в IEnumerable)

Ошибка: невозможно привести объект типа 'System.Web.Mvc.SelectList к типу' System.Collections.Generic.IEnumerable`1 [Hexsolve.Data.BusinessObjects.HSPartList] '.

Это правильный способ перебора просмотренных данных [].Пожалуйста, помогите мне в этом.

1 Ответ

0 голосов
/ 19 января 2011

Извините, мой предыдущий ответ был неверным.

Мне кажется, проблема в том, что 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
   */

Надеюсь, что это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...