1

我有这个:

@Html.DropDownList("centres", (List<SelectListItem>)ViewData["centres"])

我需要在程序运行时使用 JQuery 使用 SQL 输入数据库的数据来更新它:

jQuery(function ($) {
    jQuery("body").on('click', "#create", function () {
        $.getJSON("/Centres/updateList", function (results1) {
// perform update here using results1 from jsonresult updateList in Controller class
        });
    });
});

results1 是我的 MVC 控制器类中的一个列表。我希望能够使用这些新结果编辑我现有的 html 下拉列表。目前它显示一个 selectListItems 列表,但在控制器类的 updateList 中,我正在创建一个新列表,基于我刚刚创建的新中心。我的 Controller 类方法如下所示:

public JsonResult updateList()
{
    List<SelectListItem> centres = new List<SelectListItem>();
    SqlConnection conn = new SqlConnection(@"Data Source=(LocalDB)\v11.0;AttachDbFilename=C:\Users\Michael\Documents\Visual Studio 2012\Projects\OneEightyWebApp\OneEightyWebApp\App_Data\OneHoldings.mdf;Integrated Security=True");
    SqlCommand cmd = new SqlCommand("SELECT Centre.Centre_Name, Count(Shop_No) AS Shop_Count FROM Centre LEFT JOIN Space ON Centre.Centre_Name = Space.Centre_Name GROUP BY Centre.Centre_Name;", conn);
    DataTable dt = new DataTable();
    SqlDataAdapter da = new SqlDataAdapter(cmd);
    conn.Open();
    da.Fill(dt);
    conn.Close();
    for (int i = 0; i < dt.Rows.Count; i++)
    {
        centres.Add(new SelectListItem { Text = dt.Rows[i].ItemArray.GetValue(0).ToString(), Value = dt.Rows[i].ItemArray.GetValue(1).ToString() });
    }
    return Json(centres, JsonRequestBehavior.AllowGet);
}

有任何想法吗?

4

2 回答 2

2

您可以使用 jquery 重建下拉列表

$.getJSON("/Centres/updateList", function (results1) {
   //Clear out the old values
   $("#centres").empty();
   //Add the input items back in
   $.each(results1, function (key, val) {
      $("#centres").append($("<option></option>").attr("value", val.Value).text(val.Text));
   });
});

使用 MVC 的优点之一是它生成的 html 非常简单,并且可以使用简单的 jQuery 命令轻松复制。

于 2013-03-27T23:24:53.933 回答
0

您可以重复使用 attr 功能,因此您可以通过以下方式预先设置选择

if(val.Selected) {
  $("#centres").append($("<option></option>")
      .text(val.Text)
      .attr("value", val.Value)
      .attr("selected", "selected"));
}
于 2013-03-28T09:04:23.477 回答