如何从SQL Server数据库绑定ASP.NET MVC中的下拉列表?

时间:2017-10-24 18:36:51

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

我不知道如何从此代码中查看以显示下拉列表中的数据。请告诉我我可以做出哪些改变来解决我的问题。我尝试了一些观点,但这会导致错误。

型号:

public class Cities
{
    public int cityid { get; set; }
    public string Description { get; set; }
}

控制器:

public ActionResult Dropdownlist()
{
    List<Citites> cityname= new List<Citites>();
    string constring = ConfigurationManager.ConnectionStrings["dbx"].ConnectionString;

    SqlConnection con = new SqlConnection(constring);

    SqlCommand cmd = new SqlCommand("SELECT Cityid, Description FROM Cities", con);

    con.Open();

    SqlDataReader rdr = cmd.ExecuteReader();

    while (rdr.Read())
    {
        Citites ci = new Citites();
        ci.cityid = Convert.ToInt32(rdr["Cityid"]);
        ci.Description = rdr[1].ToString();                
        cityname.Add(ci);
    }

    return View(cityname);
}

查看:

@model IEnumerable< RegisterForm_crud_mvc_.Models.Citites>
@{
    ViewBag.Title = "Dropdownlist";
}

<h2>Dropdownlist</h2>

@Html.DropDownListFor(model => model.cityid, Model.citynanme)

1 个答案:

答案 0 :(得分:2)

您的代码中存在许多问题。您的视图是强类型的City对象列表,并且您尝试使用Model.citynanme。您的模型是城市对象列表,列表没有cityname属性(但列表中的每个项目都有)!

理想情况下,创建一个视图模型来表示视图中的数据。在您的情况下,您需要一个属性来存储所选的选项值,另一个属性用于构建SELECT元素的选项所需的数据。在你的情况下,它是城市列表。

public class MyViewModel
{
  public List<SelectListItem> Cities { set;get;}
  public int SelectedCityId { set;get;}
}

现在,在您的GET操作中,您创建了一个此对象,通过读取您的表填充Cities属性并将视图模型对象发送到视图。

public ActionResult Create()
{
  var vm = new MyViewModel();
  vm.Cities = GetCities();
  return View(vm);
}
private List<SelectListItem> GetCities()
{
    var options = new List<SelectListItem>();
    var constring = ConfigurationManager.ConnectionStrings["dbx"].ConnectionString;
    using (var c = new SqlConnection(constring))
    {
        using (var cmd = new SqlCommand("select Cityid, Description FROM Cities", c))
        {
            c.Open();
            var rdr = cmd.ExecuteReader();
            options = new List<SelectListItem>();
            while (rdr.Read())
            {
                var o = new SelectListItem
                {
                    Value = rdr.GetInt32(rdr.GetOrdinal("Cityid")).ToString(),
                    Text = rdr.GetString(rdr.GetOrdinal("Description"))
                };
                options.Add(o);
            }
        }
    }
    return options;
}

现在,在您的视图中,强烈键入MyViewModel,您将使用Html.DropDownListfor辅助方法,您将使用Cities属性作为selectList参数。

@model MyViewModel
@Html.DropDownListFor(model => model.SelectedCityId, Model.Cities)