【问题标题】:How to bind dropdown list in ASP.NET MVC from SQL Server database?如何从 SQL Server 数据库绑定 ASP.NET MVC 中的下拉列表?
【发布时间】:2017-10-24 18:36:50
【问题描述】:

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

型号:

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)

【问题讨论】:

  • @Igor Html.DropDownListFor(model => model.cityid, Model.citynanme) 我已经尝试过了,但这给出了错误
  • i have tried it but this give error We need ALL Exception details to help you。同时发布该代码(来自您的视图模板的代码)
  • @Igor 我已编辑您可以查看。我的问题是在数据库的下拉列表中显示城市名称。

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


【解决方案1】:

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

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

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

现在在您的 GET 操作中,您创建一个 this 对象,通过读取您的表填充 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)

【讨论】:

  • 非常感谢你的兄弟它的工作。但我有一个问题,它是否适用于级联下拉列表。在城市价值的基础上改变城镇?然后用于 crud 操作。如果是这样,请做指导我。
  • 您收听第一个下拉列表的change 事件,读取所选值并发送到您的服务器,并有一些服务器代码获取过滤后的数据并发送回客户端。在您的 ajax 调用成功事件中,遍历 json 数组并构建一个 li 元素并添加到第二个下拉列表中。看看这个stackoverflow.com/questions/43031292/…
  • 你提到的链接包含 ajax。我不知道 ajax 的 b。你能告诉我另一个没有 ajax 和 jqurey eta 的链接。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-09-07
  • 1970-01-01
  • 1970-01-01
  • 2021-08-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多