2013-07-05 40 views
0

在我的MVC應用程序中,我嘗試使用存儲過程檢索數據,然後將其顯示在下拉列表中。如何使用存儲過程填充選擇列表

這裏是我的控制器動作

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

相關問題