MVC 中的下拉列表

Dropdown list in 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();
    }

从上面的代码我无法显示数据来自数据库的下拉列表。 帮我实现视图中的下拉列表。

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。您的代码真的尽可能"dirty"。而且,它是恶意的。我强烈建议重新设计整个架构(说真的,创建架构,因为它根本不存在),尤其是db层(指向sql注入)