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