4

有人可以提供一个使用 ajax 在 ASP.NET MVC 的 Kendo UI 中级联下拉列表的示例吗?我说的是 Helper 方法 ( @Html.Kendo().DropDownList()) 我知道子下拉列表必须调用CascadeFrom("ParentDropDownListName"),但控制器操作是什么样的?当我尝试将它们连接起来时,我得到传递给子下拉列表操作方法的参数的空异常。我假设在幕后,Kendo 正在提取父选择的 DataValueField 并将其附加到子下拉列表的控制器操作请求中,但似乎并没有发生这种情况。

更新:我相信这与发送到我的控制器操作的“过滤器”集合有关。我只是不知道如何在我的控制器操作中处理传入的过滤器集合/对象。

4

1 回答 1

6

我猜您已经阅读了 Kendo UI 站点上的级联下拉列表示例以及 cshtml 代码源。

第二个下拉列表对应于产品,并以下列方式从类别级联:

    @(Html.Kendo().DropDownList()
      .Name("products")
      .OptionLabel("Select product...")
      .DataTextField("ProductName")
      .DataValueField("ProductID")
      .DataSource(source => {
          source.Read(read =>
          {
              read.Action("GetCascadeProducts", "ComboBox")
                  .Data("filterProducts")
                  .Type(HttpVerbs.Post); // This line serves to accept POST requests
          })
          .ServerFiltering(true);
      })
      .Enable(false)
      .AutoBind(false)
      .CascadeFrom("categories")

(请注意,我必须添加行以接受 Post 请求)

在此示例中,您将需要一个具有以下语法的控制器:

    [HttpPost]
    public JsonResult GetCascadeProducts(int category)
    {
        List<Product> Products = new List<Product>();

        Products.Add(new Product(1, 0, "Chai"));
        Products.Add(new Product(1, 1, "Chang"));
        Products.Add(new Product(1, 2, "Guarana Fantastica"));
        Products.Add(new Product(2, 0, "Aniseed Syrup"));
        Products.Add(new Product(2, 1, "Seasoning"));

        var ProductsInCategory = from p in Products where p.CategoryID == category select p;

        return Json(ProductsInCategory);
    }

我班级的模板如下:

    public class Product
    {
        public int CategoryID { get; set; }
        public int ProductID { get; set; }
        public string ProductName { get; set; }

        public Product(int category, int id, string name)
        {
            CategoryID = category;
            ProductID = id;
            ProductName = name;
        }
    }

如果您有正确的 Javascript 函数:

function filterProducts() {
    return {
        category: $("#categories").val()
    };
}

category应该与控制器方法中的参数名称相同)通常,一切都应该正常!

于 2012-09-19T15:27:09.923 回答