如何使用存储过程填充Selectlist

时间:2013-07-05 20:59:35

标签: asp.net-mvc stored-procedures selectlist

在我的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次,这是我应该获得的正确数量的记录

1 个答案:

答案 0 :(得分: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应该是列表中每个项目的显示文本。< / p>

如果不指定这些字段,目前该对象会尝试对要显示的内容进行“最佳猜测”。它可能是默认情况下通过在每个对象上调用.ToString()来实现的。 {@ 1}}在非主要类型上的默认行为是显示类型本身的名称,这就是为什么你看到每个项目的字符串.ToString()