2014-09-22 159 views
0

我是MVC的新手,仍然在学习我的方法,我正在填充一个下拉列表。我有以下代码(模型):绑定数据库到下拉列表

public class SchoolCodes 
{ 
    public int escuelaCode { get; set; } 
    public string escuelaName { get; set; } 
} 

public class AllSchoolCodes 
{ 
    public List<SchoolCodes> GetSchools() 
    { 
     List<SchoolCodes> Codes = new List<SchoolCodes>(); 
     SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["MCE"].ConnectionString); 
     SqlCommand comm = new SqlCommand("SELECT EscuelaCode, EscuelaName from Escuelas", conn); 
     conn.Open(); 
     using (var dataReader = comm.ExecuteReader()) 
     { 
      while (dataReader.Read()) 
      { 

       SchoolCodes ur = new SchoolCodes(); 
       ur.escuelaCode = Convert.ToInt32(dataReader["EscuelaCode"]); 
       ur.escuelaName = Convert.ToString(dataReader["EscuelaName"]); 
       Codes.Add(ur); 
      } 

     } 
     return Codes; 


    } 
} 
public class GetSchoolCodeViewModel 
{ 

    [Display(Name = "Escuela: ")] 
    public int SelectedEscuelaCode { get; set; } 
    public IEnumerable<SelectListItem> AllSchoolCodes { get; set; } 
} 

控制器:

private IEnumerable<SelectListItem> GetCode() 
    { 
     var dbSchoolCodes = new AllSchoolCodes(); 
     var code = dbSchoolCodes 
        .GetSchools() 
        .Select(x => 
          new SelectListItem 
          { 
           Value = x.escuelaCode.ToString(), 
           Text = x.escuelaName 
          }); 

     return new SelectList(code, "Value", "Text"); 
    } 


public ActionResult Index() 
    { 
     var model = new GetSchoolCodeViewModel 
     { 
     AllSchoolCodes = GetCode() 
     }; 
     return View(model); 
    // return View(); 
    } 

现在,我收到以下错误教室后面的指数控制器:错误1无法隐式转换类型“System.Collections中.Generic.IEnumerable'到'System.Collections.Generic.IEnumerable'。存在明确的转换(您是否缺少演员?)。我被困在这里,完全不知道该怎么做。任何帮助都是极好的。

回答

1

YPU不需要重新创建SelectList因为你是reutrning IEnumerable<SelectListItem>,你可以简单地返回SelectList这样:

private SelectList GetCode() 
{ 
     var dbSchoolCodes = new AllSchoolCodes(); 
     var code = dbSchoolCodes.GetSchools(); 


     return new SelectList(code, "escuelaCode", "escuelaName"); 
} 

,或者如果你想回到IEnumerable<SelectListItem>那么你可以做这样没有必要再次创建SelectList

private IEnumerable<SelectListItem> GetCode() 
    { 
     var dbSchoolCodes = new AllSchoolCodes(); 
     var code = dbSchoolCodes 
        .GetSchools() 
        .Select(x => 
          new SelectListItem 
          { 
           Value = x.escuelaCode.ToString(), 
           Text = x.escuelaName 
          }); 

     return code; 
    } 
+0

好吧会检查这一点,谢谢。 – 2014-09-22 17:32:47