【问题标题】:How to return the appropriate results with JSON in order to populate cascading drop down lists?如何使用 JSON 返回适当的结果以填充级联下拉列表?
【发布时间】:2023-03-25 11:41:01
【问题描述】:

我正在尝试填充第二个下拉列表(其中包含县),具体取决于在第一个下拉列表(包含国家)中选择的内容。

我有一个名为 GetCounties 的控制器操作:

  public JsonResult GetCounties(string id)
    {
        DBEntities dc = new DBEntities();
        JsonResult result = new JsonResult();
        var filteredDivisions = from div in dc.Divisions
                                where div.CountryID == 1 //id
                                select div;
        result.Data = filteredDivisions.ToList();        
        return Json(result.Data, JsonRequestBehavior.AllowGet);          

        //         return Json(new[] {
        //    new { Id = filteredDivisions.ToArray()[0].DivisionID, Value = filteredDivisions.ToArray()[0].DivisionName },
        //    new { Id = 2, Value = "value 2" },
        //    new { Id = 3, Value = "value 3" },
        //}, JsonRequestBehavior.AllowGet);
    }

注意被注释掉的部分。这对我来说很好,(我从分区列表中获得第一个值,另外两个称为“值 2”和“值 3”。我用它来测试回调,但这是唯一给我的东西结果。使用:

 return Json(result.Data, JsonRequestBehavior.AllowGet);     

在视图方面没有实现任何目标。调试时,所有正确的值都在那里,但它们不会出现在视图侧的下拉列表中。正如我所说,我得到的唯一结果是使用被注释掉的代码(硬编码值,当然不够好)。我尝试使用 for 循环遍历列表以填充数组,但没有任何效果,我收到错误,例如匿名类型是只读的,所以我无法再次设置它。

这是我的 jquery 代码:

  $(function () {
            $.getJSON('/Entity/GetCounties', function (result) {
                var ddl = $('#DivisionsList');
                ddl.empty();
                $(result).each(function () {
                    $(document.createElement('option'))
            .attr('value', this.Id)
            .text(this.Value)
            .appendTo(ddl);
                });
            });
        });

Divisionslist 当然是包含所有县的下拉列表,通过使用上面未注释的返回语句,它只返回不变,即包含其所有值,而不仅仅是应该根据所选值出现的值国家。 所以请我如何用过滤后的结果填充一个数组,以便我可以使用 JSON 将它返回到视图中?我想使用我发布的这个代码,因为它是唯一有效的。我只需要用正确的值交换硬编码值。这就是我遇到麻烦的地方。

请帮帮我。

【问题讨论】:

    标签: jquery asp.net-mvc json drop-down-menu cascadingdropdown


    【解决方案1】:
    $.getJSON('/Entity/GetCounties', {id: $('#yourCountrySelect').val()},function (result) {
    

    现在我会读你的文字墙^^

    【讨论】:

      【解决方案2】:

      我自己解决了。我做的是这样的:

         public JsonResult GetDivisions(int id)
          {
              ASNEntities dc = new ASNEntities();
              JsonResult result = new JsonResult();
              var filteredDivisions = from div in dc.Divisions
                                      where div.CountryID == id
                                      select div;
      
              List<object> listToReturn = new List<object>();
      
              for (int i = 0; i < filteredDivisions.Count(); i++)
              {
                  Object[] obj = new[]{
                   new { Id = filteredDivisions.ToArray()[i].DivisionID, Value = filteredDivisions.ToArray()[i].DivisionName },
              };
      
                 listToReturn.Add(obj[0]);              
              }
      
              return Json(listToReturn.ToArray(), JsonRequestBehavior.AllowGet);
      
              //return Json(new[] {
              //    new { Id = filteredDivisions.ToArray()[0].DivisionID, Value = filteredDivisions.ToArray()[0].DivisionName },
              //    new { Id = 2, Value = "value 2" },
              //    new { Id = 3, Value = "value 3" },
              //}, JsonRequestBehavior.AllowGet);
      
          }
      

      而且效果很好。

      【讨论】:

        猜你喜欢
        • 2012-12-29
        • 1970-01-01
        • 2023-03-07
        • 2023-03-19
        • 2015-03-09
        • 1970-01-01
        • 2012-07-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多