2016-02-16 3 views
-1

У меня возникла проблема с привязкой выпадающего списка в MVC. Мой код выглядит следующим образом.Раскрывающийся список в MVC

Модель:

public class CommentDateLayer 
{ 
    SqlConnection con = new SqlConnection(WebConfigurationManager.ConnectionStrings["BlogContext"].ToString()); 
    public int AddEmplyee(Comment cmt) 
    { 

     string sql = "INSERT INTO [MVCTest].[dbo].[tblComment]([Name],[Email],[Message]) " + 
           " VALUES " + 
          " ('" + cmt.Name + "','" + cmt.Email + "','" + cmt.Message + "')"; 
     SqlCommand cmd = new SqlCommand(sql, con); 
     con.Open(); 
     int i = cmd.ExecuteNonQuery(); 
     con.Close(); 
     return i; 
    } 
    public IEnumerable<SelectListItem> Department { get; set; } 

    public DataSet bindddl() 
    { 
     SqlCommand cmd = new SqlCommand("spGetAllRec", con); 
     cmd.CommandType = CommandType.StoredProcedure; 
     SqlDataAdapter da = new SqlDataAdapter(cmd); 
     DataSet ds = new DataSet(); 
     da.Fill(ds); 
     return ds; 
    } 
} 
public class Comment 
{ 
    [Required] 
    public string Name { get; set; } 
    [Required] 
    public string Email { get; set; } 
    [Required] 
    [DataType(DataType.MultilineText)] 
    public string Message { get; set; } 
    public int DeptID { get; set; } 
    public int PostId { get; set; } 
} 

Контроллер:

[HttpGet] 
    public ActionResult Index() 
    { 
     return View(); 
    } 
    [HttpPost] 
    public ActionResult Index(FormCollection frm) 
    { 
     Comment c = new Comment(); 
     c.Name = frm["Name"]; 
     c.Email = frm["Email"]; 
     c.Message = frm["Message"]; 
     CommentDateLayer cmnt = new CommentDateLayer(); 
     if (cmnt.AddEmplyee(c) == 1) 
     { 
      ViewBag.Status = "Submitted !"; 
     } 
     return View(); 
    } 
    public ActionResult Index(CommentDateLayer obj) 
    { 
     DataSet ds = obj.bindddl(); 
     ViewBag.fname = ds.Tables[0]; 
     List<SelectListItem> items = new List<SelectListItem>(); 
     foreach (System.Data.DataRow dr in ViewBag.fname.Rows) 
     { 
      ViewBag.fname = new SelectList(items, "DeptID", "DeptName");     
     } 
     ViewBag.fname = items; 
     return View(); 
    } 

из кода выше я не могу отобразить DropDownList, где данные поступают из базы данных. Помогите мне создать раскрывающийся список в представлении.

+1

Вы не указываете данные в 'items' в selectlist – anand

+0

Вы даже не показали свое мнение! Как вы создаете выпадающий список? –

+2

И ваш цикл foreach создает в каждом итерации один новый 'SelectList', основанный на пустой коллекции. Я настоятельно рекомендую вам перейти на сайт MVC и работать с учебниками и опереться на основы. –

ответ

1
public ActionResult Index(CommentDateLayer obj) 
{ 
    DataSet ds = obj.bindddl(); 
    //ViewBag.fname = ds.Tables[0]; - I even can't imagine sense in this row 
    var selectList = new List<SelectListItem>(); 
    foreach (System.Data.DataRow dr in ds.Tables[0].Rows) 
    { 
     //ViewBag.fname = new SelectList(items, "DeptID", "DeptName"); 
     selectList.Add(new SelectListItem() { Text = dr.DeptName, Value = dr.DeptID }); 
    } 
    ViewBag.fname = new SelectList(selectList, "DeptName", "DeptID"); 
    //ViewBag.fname = items; - can't imagine too, after fill by values 
    return View(); 
} 

PS. Ваш код действительно «грязный», насколько это возможно. Кроме того, это злонамеренно. Я настоятельно рекомендую перепроектировать всю архитектуру (по правде говоря, создать архитектуру, потому что ее вообще нет), особенно слой db (укажите на sql-инъекцию)

Смежные вопросы