如何根据主下拉列表更新 2 个下拉列表?

Posted

技术标签:

【中文标题】如何根据主下拉列表更新 2 个下拉列表?【英文标题】:How to update 2 dropdowns based on primary dropdown? 【发布时间】:2020-06-18 14:39:40 【问题描述】:

我正在尝试根据主下拉列表的值同时更新 2 个相关下拉列表。是否有可能,如果是,我的代码有什么问题?请正确。

也许最好使用 ASP.NET 级联下拉菜单?如果是,如何使用 3 个下拉菜单?

查看

@model RKB.Models.CountryStateViewModel

<br /><br/>
      @using (html.BeginForm("Index", "Home"))
      
      <div class="container">
          <div class="form-group">
              @if (ViewBag.CountryList != null)
              
                  @Html.DropDownListFor(model => model.CountryId, ViewBag.CountryList as SelectList, "Выберите страну", new  @class = "form-control" )
              
          </div>
          <div class="form-group">
              @Html.DropDownListFor(model => model.StateId, new SelectList(" "), "Выберите штат", new  @class = "form-control" )
          </div>
          <div class="form-group">
              @Html.DropDownListFor(model => model.PriceId, new SelectList(" "), "Выберите цену", new  @class = "form-control", @style = "display:none" )
          </div>
          <button type="submit">Send</button>
      </div>
      
      <script src="~/Scripts/jquery-3.3.1.min.js"></script>
<script>
    $(document).ready(function () 
        $("#CountryId").change(function () 
            $.get("/Home/GetStateList",  CountryId: $("#CountryId").val() , function (data) 
                $("#StateId").empty();
                $.each(data, function (index, row) 
                    $("#StateId").append("<option value='" + row.StateId + "'>" + row.StateName + "</option>")
                );
            );
        )

    );

    $(document).ready(function () 
        $("#StateId").change(function () 
            $.get("/Home/PriceList",  StateId: $("#StateId").val() , function (data) 
                $("#PriceId").empty();
                $.each(data, function (index, row) 
                    $("#PriceId").append("<option value='" + row.PriceId + "'>" + row.Price1 + "</option>")
                );
            );
        )

    );

</script>

控制器

public class HomeController : Controller

    RKBEntities db = new RKBEntities();

    public ActionResult Index()
    
        List<Country> CountryList = db.Countries.ToList();
        ViewBag.CountryList = new SelectList(CountryList, "CountryId", "CountryName");
        return View();
    

    [HttpPost]
    public ActionResult Index(CountryStateViewModel csm)
    

        return View();
    

    public JsonResult GetStateList(int CountryId)
    
        db.Configuration.ProxyCreationEnabled = false;
        List<State> StateList = db.States.Where(x => x.CountryId == CountryId).ToList();
        return Json(StateList, JsonRequestBehavior.AllowGet);
    

    public JsonResult GetPriceList(int StateId)
    
        db.Configuration.ProxyCreationEnabled = false;
        List<Price> PriceList = db.Prices.Where(x => x.StateId == StateId).ToList();
        return Json(PriceList, JsonRequestBehavior.AllowGet);
    

【问题讨论】:

【参考方案1】:

朋友,你使用了错误的属性 json。 例如:row.StateId => row.stateId。

只需尝试像这样修改以下内容:

<script>
    $(document).ready(function () 
        $("#CountryId").change(function () 
            $.get("/Home/GetStateList",  CountryId: $("#CountryId").val() , function (data) 
                $("#StateId").empty();
                $.each(data, function (index, row) 
                    $("#StateId").append("<option value='" + row.stateId + "'>" + row.stateName + "</option>")
                );
            );
        )

    );

    $(document).ready(function () 
        $("#StateId").change(function () 
            $.get("/Home/PriceList",  StateId: $("#StateId").val() , function (data) 
                $("#PriceId").empty();
                $.each(data, function (index, row) 
                    $("#PriceId").append("<option value='" + row.priceId + "'>" + row.price1 + "</option>")
                );
            );
        )

    );

</script>

希望能帮到你,我的朋友 :))

【讨论】:

将尝试这样做。但是,第一个更改事件对我有用。在第二个 jquery 函数中,我使用 Price 属性,因为它是 Ado 自动生成的属性的名称。网。也许应该改变其他东西? @P3ar1baron:是的,也许吧。你可以使用调试器来检查属性,我的朋友。

以上是关于如何根据主下拉列表更新 2 个下拉列表?的主要内容,如果未能解决你的问题,请参考以下文章

如何返回由 2 个下拉列表更新的数据表作为 Plotly Python 中的输入

如何根据第一个下拉列表的选择过滤第二个下拉列表? - 角

根据下拉列表的值创建 2 个下拉列表和一个表

如何在颤振中实现未来的下拉列表并根据用户选择更新值

如何根据使用 jQuery/AJAX 和 PHP/MySQL 选择的第一个下拉列表填充第二个下拉列表?

如何使用Javascript根据先前的下拉值显示第二个下拉列表