如何将存储过程放入下拉列表C#MVC 5中

时间:2016-05-04 14:22:06

标签: c# sql-server asp.net-mvc

我认为我可以轻松地做到这一点但是我遇到了错误,我试图在MVC 5中创建一个下拉列表,其中显示了我从SQL存储过程中收到的数据。我得到了正确数量的下拉项目(7)但是所有项目都是从SQL数据中重复的最后一个值。我验证我的SQL存储过程返回7个不同的行,具有我想要的不同值。

在我的模特中:

public class FindHost
{
    public List<Details> Inform {get; set;}

    public FindHost()
    {
        Inform = new List<Details>();
    }
}

public class Details
{
    public string HostNames {get; set;}
    public string HostID {get; set;}
}

在控制器中:

public ActionResult create(int? id)
{
    FindHost data = new FindHost();
    Details hosts = new Details();

    System.Data.SqlClient.SqlDataReader reader;

    using(SqlConnection connection = new SqlConnection("..."))
    {
        using(SqlCommand cmd = new SqlCommand("Stored Procedure Name",connection))
        {
            cmd.CommandType = System.Data.CommandType.StoredProcedure;
            cmd.Parameters.AddWithValue("@Column1", 343);
            cmd.Parameters.AddWithValue("@Column2", 343);

            reader = cmd.ExecuteReader();

            while(reader.Read())
            {
                hosts.HostID = reader["hostID"].Tostring();
                hosts.HostNames = reader["hostName"].Tostring();
                data.Inform.Add(hosts);
            }

            reader.Close();
        }
    }

    ViewBag.HostStuff = new SelectList(data.Inform,"HostID", "HostNames");
    return View();
}

1 个答案:

答案 0 :(得分:1)

正如@Kritner所说:

while(reader.Read())
{
    Details hosts = new Details();

    hosts.HostID = reader["hostID"].Tostring();
    hosts.HostNames = reader["hostName"].Tostring();
    data.Inform.Add(hosts);
}