mvc中的动态州城市下拉列表

时间:2014-04-26 18:45:19

标签: asp.net-mvc

我试图找出我的代码有什么问题,我已经半疯了,所以需要一些帮助, 我的代码工作正常,实际上我的代码所做的是它动态获取表单2下拉列表,一个用于州和一个用于城市,当我选择任何状态时,其相应的城市从城市下拉列表中的数据库填充!,状态下拉列表是填充了州,但城市下拉列表填充了未定义的选项!,这是我面临的基本问题,我也粘贴我的代码,也许任何人都可以弄清楚它基本上是什么问题!

的HomeController

public class homeController : Controller
{
    //
    // GET: /home/
    DataClasses1DataContext dd = new DataClasses1DataContext();
    public ActionResult Index()
    {

        ViewBag.state = dd.tb_statecities.Select(m => new SelectListItem { Text = m.state }).Distinct().ToList();
        return View();
    }
    public ActionResult city(string state)
    {

        var v = dd.tb_statecities.Where(m => m.state == state).Select(m => m.city).ToList();
        return Json(v, JsonRequestBehavior.AllowGet);


    }

}

INDEX.CSHTML

<script src="~/Scripts/jquery-1.7.1.min.js"></script>
<script type="text/javascript">
    $(function () {

        $('#state').change(function () {

            var val = $('#state').val();
            $.get("home/city", { state: val }, function (data) {
                var v="<option>Select</option>"
                $.each(data, function (i, q) {

                    v += "<Option value=" + q.city + ">" + q.city + "</option>";


                });
                $('#city').html(v);

            });

        });

    });



</script>



<div>
    @Html.DropDownList("state", "Select")
    @Html.DropDownList("city", new List<SelectListItem> {    new SelectListItem{Text="Select",Value="0"}


});

1 个答案:

答案 0 :(得分:0)

我猜测tb_statecities.city是一个字符串,因此此查询返回的是List<string>,而不是List<tb_statecity> ...

var v = dd.tb_statecities
            .Where(m => m.state == state)
            .Select(m => m.city)
            .ToList();

这意味着在JavaScript中,q已经是城市的名称,这解释了q.cityundefined的原因。试试这个......

$.each(data, function (i, q) {
    v += "<Option value=" + q+ ">" + q + "</option>";
});