Заполнить выпадающий список с помощью Massive ORM? - PullRequest
2 голосов
/ 17 сентября 2011

Я использую MVC 3 и Massive ORM.

Мне интересно, как я могу заполнить выпадающий список с помощью Massive ORM, чтобы получить мои данные из базы данных.

Я передаю свой список категорий моему представлению, используя ViewData ["Categoryoreis"]. Он передал данные в представление, но я получаю сообщение об ошибке при попытке загрузить страницу в браузере:

Привязка данных: «System.Dynamic.ExpandoObject» не содержит свойство с именем «CategoryID».

Вот так выглядит мой выпадающий список:

@Html.DropDownListFor(model => model.CategoryID, new SelectList(ViewData["Categories"] as IEnumerable<dynamic>, "CategoryID", "Name"), "--Category--")

У кого-нибудь есть решение моей проблемы?

Ответы [ 3 ]

3 голосов
/ 23 сентября 2011

Я сейчас использую Massive. Вот как я заполнил раскрывающийся список стран из таблицы в базе данных:

Это в моем контроллере:

DetailsModel model = new DetailsModel();
var _countries = new Countries(); //Massive class
model.Countries = _countries.All().Select(x => new SelectListItem { Value = x.Id.ToString(), Text = x.Name });

Вот свойство Countries, которое находится внутри моего DetailsModel

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

На мой взгляд:

@Html.LabelFor(m => m.Country)
@Html.DropDownList("Country", Model.Countries)
@Html.ValidationMessageFor(m => m.Country)

Работает как очарование для меня.

1 голос
/ 28 сентября 2011

Похоже, для этой цели есть метод Massive, называемый KeyValues. В настоящее время это строка 360 в исходном коде . Он возвращает словарь, а не Expando. Я предполагаю, что вы продолжаете использовать ваш Expando в другом месте вашего кода.

Вот подпись метода:

/// This will return a string/object dictionary for dropdowns etc  
public virtual IDictionary<string, object> KeyValues(string orderBy = "") {...}
0 голосов
/ 18 сентября 2011

Я передаю свой список категорий моему представлению, используя ViewData ["Categoryoreis"]

Я бы порекомендовал вам использовать модели и забыть о ViewData / ViewBag.Например, определите следующую модель представления:

public class MyViewModel
{
    public int CategoryID { get; set; }
    public SelectList Categories { get; set; }
}

и в контроллере заполните модель и перейдите к представлению:

public ActionResult Index()
{
    var categories = _repository.GetCategories();
    var model = new MyViewModel
    {
        // this assumes that categories is an IEnumerable<T>
        // where T is some domain model having CategoryID and Name properties
        Categories = new SelectList(categories, "CategoryID", "Name")
    };
    return View(model);
}

и, наконец, в строго типизированном представлении:

@model MyViewModel
@Html.DropDownListFor(x => x.CategoryID, Model.Categories, "--Category--")
...