Dropdownlist с IEnumerable типом данных - PullRequest
3 голосов
/ 11 июля 2011

Моя модель выглядит следующим образом

    public IEnumerable<SelectListItem> ProductTypes { get; set; }

    public ProductContent()
    {
        productxEntities db = new productxEntities();

        ProductTypes = db.ProductCodes.Select(c => new SelectListItem
        {
            Value = c.product_type.ToString(),
            Text = c.code.ToString()
        });



    }

, когда я пытаюсь использовать ее для DropDownList Я получаю сообщение об ошибке, говорящее, что приведение неверно ... как правильно заполнить DDL с использованием списка из БДв MVC3 Razor C # у меня есть тесно связанный вид для этого типа модели.

@Html.DropDownList("ProductTypes", (IEnumerable<SelectListItem>) Model.ProductTypes)

это ошибка

Невозможно привести объект типа 'System.Data.Entity.Infrastructure.DbQuery 1[System.Web.WebPages.Html.SelectListItem]' to type 'System.Collections.Generic.IEnumerable 1 [System.Web.Mvc.SelectListItem] '.

это мой контроллер

public ActionResult Create()
    {
        ProductContent productViewModel = new ProductContent();
        return PartialView("../PartialViews/NewProduct", productViewModel);
    } 

Ответы [ 2 ]

10 голосов
/ 11 июля 2011

Вы должны звонить ToList где-то в вашем EF-запросе.В противном случае вы возвращаете Queryable непосредственно в ваше представление.

Возможно, так:

public ProductContent()
{
    productxEntities db = new productxEntities();

    ProductTypes = db.ProductCodes.ToList().Select(c => new SelectListItem
    {
        Value = c.product_type.ToString(),
        Text = c.code.ToString()
    });
}

Как я уже упоминал в своем комментарии, хотя;Я бы не одобрял такого рода код в конструкторе модели.Кто-то другой должен назначить его для Модели.

После этого вы сможете удалить свой каст в своем Представлении.

3 голосов
/ 11 июля 2011

Корень проблемы в том, что типы System.Web.WebPages.Html.SelectListItem и System.Web.Mvc.SelectListItem не могут быть назначены.

Вполне вероятно, что в контроллере для представления есть разные импорты пространства имен.В этом случае вам нужно быть явным: либо модель должна использовать new System.Web.Mvc.SelectListItem(...), либо представление должно быть приведено к (IEnumerable<System.Web.WebPages.Html.SelectListItem>).

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