Недопустимое исключение при кастинге в моем простом приложении - PullRequest
2 голосов
/ 06 сентября 2010

Вот суть: в моей школе есть список классов.Каждый класс принадлежит одной карьере.Я создаю создать новую форму класса, например.Математика, общественные науки и т. Д. В форме, которую я хочу создать в раскрывающемся списке с доступными предлагаемыми вакансиями.

Невозможно привести объект типа 'System.Collections.Generic.List`1 [System.Web.Mvc.SelectListItem] 'для ввода' System.Web.Mvc.SelectList '.

Вот мой код:

[HttpGet]
public ActionResult Crear()
{
    CarreraRepository carreraRepository = new CarreraRepository();
    var carreras = carreraRepository.FindAll().OrderBy(x => x.Nombre);
    var carrerasList = new List<SelectListItem>();

    foreach (var carrera in carreras)
    {
        carrerasList.Add(new SelectListItem()
        {
            Text = carrera.Nombre,
            Value = carrera.ID.ToString()
        });
    }

    ViewData["Carreras"] = carrerasList.AsEnumerable();

    Materia materia = new Materia();
    return View(materia);        
}

[HttpPost]
public ActionResult Crear(Materia materia, FormCollection values)
{
    if (ModelState.IsValid)
    {
        repo.Add(materia);
        repo.Save();

        return RedirectToAction("Index");
    }
    return View(materia);

}

А вот представление:

<div class="editor-label">
    <%: Html.LabelFor(model => model.IDCarrera) %>
</div>
<div class="editor-field">
    <%: Html.DropDownList("Carrera", (SelectList)ViewData["Carreras"]) %>
    <%--<%:Html.TextBoxFor(model => model.IDCarrera)%>--%>
    <%: Html.ValidationMessageFor(model => model.IDCarrera) %>
</div>

Есть предложения?Моя схема и код базы данных кода очень просты, поэтому ошибка может быть совершенно очевидна для некоторых.Спасибо за помощь!:)

Ответы [ 2 ]

3 голосов
/ 06 сентября 2010

Вы должны поместить SelectList в данные представления вместо List<SelectlistItem>, например, так:

var carreras = carreraRepository.FindAll().OrderBy(x => x.Nombre);
var carrerasList = new SelectList(carreras, "ID", "Nombre");

ViewData["Carreras"] = carrerasList;
0 голосов
/ 09 октября 2018

Для меня, поскольку у вас есть список IEnumerable<SelectListItem>, вы можете просто поместить его в переменную ViewData, например:

CarreraRepository carreraRepository = new CarreraRepository();
var carreras = carreraRepository.FindAll().OrderBy(x => x.Nombre);

IEnumerable<SimpleListItem> carrerasList = 
    carreras.Select(d => new SelectListItem { 
        Text = d.Nombre, 
        Value = d.ID.ToString() 
    }
);

ViewData["Carreras"] = carrerasList;

Затем вы сделаете это в своем представлении:

@Html.DropDownList("Carreras", (IEnumerable<SelectListItem>)ViewData["Carreras"])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...