Jquery 级联下拉列表更新数据库调用

Jquery 级联下拉列表更新数据库调用,jquery,ajax,asp.net-mvc,Jquery,Ajax,Asp.net Mvc,我目前需要创建一个级联下拉列表 <td>@Html.LabelFor(u => u.States)</td> <td> @Html.DropDownListFor(model => model.State, new SelectList(Model.States), new { style = "height:27px;border: 1px solid grey;", @id = "StateSelected" }

我目前需要创建一个级联下拉列表

    <td>@Html.LabelFor(u => u.States)</td>
    <td>
        @Html.DropDownListFor(model => model.State, new SelectList(Model.States), new { style = "height:27px;border: 1px solid grey;", @id = "StateSelected" })                                                      
         @Html.ValidationMessageFor(u => u.States)
         @Html.HiddenFor(model => model.CustomerNumber)
    </td>                
</tr>
<tr>
    <td></td>
    <td>@Html.LabelFor(u => u.ShipToCode)</td>
    <td>
        @Html.DropDownListFor(model => model.ShipToCode, new SelectList(Model.Sites, "Code", "Address"), new { style = "height:27px;border: 1px solid grey;" })                                                      
        @Html.ValidationMessageFor(u => u.Sites)
        @Html.HiddenFor(model => model.CustomerNumber)
    </td>                
</tr>
但是,我似乎没有正确地传递模型,因此数据被传递以进行过滤。有什么建议吗

编辑2:站点人口

private SitesModel GetSiteAddresses(SitesModel model)
    {
        model.Sites = new List<SitesModel.SiteAddresses>();
        using (NAVLIVEEntities entities = new NAVLIVEEntities())
        {
            try
            {
                List<GetServiceDeliveryAddress_Result> Addresses = entities.GetServiceDeliveryAddress(model.CustomerNumber).ToList();

                foreach (var site in Addresses)
                {
                    SitesModel.SiteAddresses address = new SitesModel.SiteAddresses();
                    address.Code = site.Code;
                    address.Address = site.Address + " " + site.Address_2 + ", " + site.City + " " + site.County + " " + site.Post_Code;
                    address.State = site.County;
                    model.Sites.Add(address);
                }
            }
            catch
            {
            }
        }
        return model;
    }
私有站点模型GetSiteAddresses(站点模型)
{
model.Sites=新列表();
使用(NAVLIVEEntities=新的NAVLIVEEntities())
{
尝试
{
列表地址=entities.GetServiceDeliveryAddress(model.CustomerNumber.ToList();
foreach(地址中的var站点)
{
SitesModel.SiteAddresses地址=新建SitesModel.SiteAddresses();
address.Code=site.Code;
address.address=site.address+“”+site.address\u 2+,“+site.City+“”+site.country+“”+site.Post\u代码;
address.State=site.County;
模型.站点.添加(地址);
}
}
抓住
{
}
}
收益模型;
}

你在努力解决什么问题?(这里有太多不必要的代码-您的
GetDistinctStates()
代码可以减少到一行或两行)。建议您参考级联下拉列表的示例Shi Stephen,我正在努力为第一个下拉列表重新填充关于更改事件的第二个下拉列表。由于我对javascript和json的了解非常有限,所以我一直在苦苦挣扎。任何指点都将非常感激。我会在阅读的同时通过链接,但如果你有任何投入,这将是伟大的。另外,对于GetDistinctStates,有什么建议可以删除这些行吗?看看我链接到的小提琴。还有,斯蒂芬,我花了一段时间研究它,但我仍然有很多问题。介意为我设置的编辑提供一些输入吗?你的
FetchSites()
方法究竟为什么有参数
SitesModel模型和
字符串模型移除它们。只需传递
{State:$(this.val()}
<script type="text/javascript">
    var localityUrl = '@Url.Action("FetchSites")';
    var localities = $('#FetchSites');
    $('#SelectedState').change(function () {
        var txt = $(this).val();
        alert(txt);
        $.getJSON(localityUrl, { model: @Html.Raw(Json.Encode(Model)), State: $(this).val() }, function (data) {
            if (!data) {
                return;
            }
            localities.append($('<option></option>').val('').text('Please select'));
            $.each(data, function (index, item) {
                localities.append($('<option></option>').val(item.Value).text(item.Text));
            });
        });
    })
</Script>
[HttpGet]
    public JsonResult FetchSites(SitesModel model, string State)
    {
        var data = model.Sites.Where(l => l.State == State).Select(l => l.Address);

        return Json(data, JsonRequestBehavior.AllowGet);
    }
private SitesModel GetSiteAddresses(SitesModel model)
    {
        model.Sites = new List<SitesModel.SiteAddresses>();
        using (NAVLIVEEntities entities = new NAVLIVEEntities())
        {
            try
            {
                List<GetServiceDeliveryAddress_Result> Addresses = entities.GetServiceDeliveryAddress(model.CustomerNumber).ToList();

                foreach (var site in Addresses)
                {
                    SitesModel.SiteAddresses address = new SitesModel.SiteAddresses();
                    address.Code = site.Code;
                    address.Address = site.Address + " " + site.Address_2 + ", " + site.City + " " + site.County + " " + site.Post_Code;
                    address.State = site.County;
                    model.Sites.Add(address);
                }
            }
            catch
            {
            }
        }
        return model;
    }