Как привязать представление MVC3 к списку SelectList, созданному из IEnumerable <MyCustomType> - PullRequest
1 голос
/ 15 декабря 2011

Когда я пытаюсь связать в представлении MVC 3 (используя помощник @ Html.DropDownList) список выбора на основе IEnumerable , где X - это пользовательский класс, который я создал, а не класс фреймворка, я получаюошибка «Привязка данных:« MyCustomNamespace.MyCustomClass »не содержит свойство с именем« MyProperty ».».Я не получаю сообщение об ошибке, если я использую SelectListItem или KeyValuePair вместо моего пользовательского класса в IEnumerable - в этом случае он работает нормально.Я предполагаю, что проблема может заключаться в том, что мой пользовательский класс не известен в помощнике Html.DropDownList и, следовательно, там нет доступа?Но я думал, что это должно было работать с использованием отражения и имен свойств, которые я указал во время определения SelectList, так что в этом нет необходимости…?

Вот упрощенная версия моего кода:

// In .cshtml file:
@Html.DropDownList("cmbSection", (SelectList)ViewBag.Section)

// In Controller:
List<MyCustomClass> filters = new List<MyCustomClass>();
MyCustomClass testItem1 = new MyCustomClass { MyProperty = "AAA"};
MyCustomClass testItem2 = new MyCustomClass { MyProperty = "BBB"};

filters.Add(testItem1);
filters.Add(testItem2);

return new SelectList(filters, "AAA", "MyPropertyName", "MyPropertyName");

// Elsewhere:
public class MyCustomClass
{
    public string MyProperty
}

Спасибо!

Ответы [ 2 ]

1 голос
/ 16 декабря 2011

контроллер

//your code starts
List<MyCustomClass> filters = new List<MyCustomClass>();
MyCustomClass testItem1 = new MyCustomClass { MyProperty = "AAA"};
MyCustomClass testItem2 = new MyCustomClass { MyProperty = "BBB"};

filters.Add(testItem1);
filters.Add(testItem2);
//your code ends here

var items= (from item in filters
                select new SelectListItem
                {
                    Value= item.MyProperty 
                    Text= item.MyProperty 
                }).toList();

   ViewBag.items= items;

View

@Html.DropDownList("MyDropDownList", items)
0 голосов
/ 16 декабря 2011

Ознакомьтесь с блогом Phil Haacked Привязка модели к списку .Он публикует почти все о том, как механизм связывания моделей по умолчанию работает со списками.

...