2013-07-05 5 views
0

В моем приложении MVC я пытаюсь извлечь данные с помощью хранимой процедуры, а затем отобразить ее в раскрывающемся списке.Как заполнить Selectlist с помощью хранимой процедуры

Вот Мои действия контроллера

public ActionResult Register(string id) 
{ 
    RegistrationModel Student = new RegistrationModel(); 

     using (var db = new StudentEntities()) 
     { 
      var SportResultList = GetListOfSport(); 
      var SportSelectList = new SelectList(SportResultList); 
      ViewBag.SportList = SportSelectList; 

    return View(Student); 
} 

Вот метод, чтобы получить список с помощью хранимой процедуры

 public static List<GetSportsResult> GetListOfSport() 
       { 
     using (var db = new StudentEntities()) 
      { 
ObjectResult<GetSportsResult> SportResults = db.GetSportsByStudentIdAndSeason(11111, 1); 
List<GetSportsResult> results = SportResults.ToList(); 

      return results; 
      } 

     } 

Хранимая процедура возвращает сложный тип, который называется GetSportsResults, но я сейчас не как получить доступ к своим полям.

В настоящее время этот код будет отображать GetSportsResults 20 раз, что является правильное количество записей, я должен получать

ответ

3

В the constructor for SelectList вы можете указать, какие поля будут использоваться для текста и для значения. Это делается путем передачи строковых значений в конструктор.

Например, если ваш GetSportsResult объект имеет .ID свойство в качестве идентификатора и .Name свойство в качестве значения отображения, то ваш код будет выглядеть следующим образом:

var SportResultList = GetListOfSport(); 
var SportSelectList = new SelectList(SportResultList, "ID", "Name"); 
ViewBag.SportList = SportSelectList; 

Это указывает на SelectList объекта, GetSportsResult.ID должно быть значением для каждого элемента в списке, а GetSportsResult.Name - отображаемый текст для каждого элемента в списке.

Без указания этих полей в настоящее время объект пытается сделать «наилучшее предположение» о том, что отображать. Вероятно, это делается по вызову .ToString() по каждому объекту по умолчанию. И поведение по умолчанию .ToString() на непримитивном типе - это отображение имени самого типа, поэтому вы видите строку "GetSportsResult" для каждого элемента.

+0

Благодарим за добавление параметров к этому элементу SelectList. – meda