将kendo DropDownListFor的值传递给另一个DropDownList For的读取操作

本文关键字:For DropDownList 读取 操作 另一个 kendo DropDownListFor 值传 | 更新日期: 2023-09-27 18:20:37

我有一个DropDownListFor组件,它有一个从数据库获取值的读取操作。但是,我想根据另一个DropDownListFor的值来过滤这些值。

这是DropDownListFor组件,它具有过滤值

        <div class="editor-field">
                        @(Html.Kendo().DropDownListFor(model => model.ReleaseID)
                        .DataTextField("Value")
                        .DataValueField("Key")
                        .DataSource(ds => ds 
                            .Read(read=>read.Action("GetReleases", "Task"))
                            ) 
                        ) 
            @Html.ValidationMessageFor(model => model.ReleaseID)
          </div>

我想做的是将ReleaseID的值传递到另一个DropDownListFor的读取操作中。我试着这样做:

                <div class="editor-field">
                @(Html.Kendo().DropDownListFor(model => model.MarketModelID)
                      .Events(e => e.Select("onSelectMarketModel"))
                      .Template("<span data-title='Model Description: #: data.Item3 #'>#: data.Item2 # </span>")
                      .DataTextField("Item2")
                      .DataValueField("Item1")
                      .DataSource(ds => ds
                          .Read(read => read.Action("GetMarketModels", "Task", new { release = Model.ReleaseID }))
                  )) 
                @Html.ValidationMessageFor(model => model.MarketModelID)
            </div>

带有控制器方法签名:

public JsonResult GetMarketModels(int? release)
{
    //code to get market models based on release
}

但是,无论顶部ReleaseID DropDownFor的选择是什么,GetMarketModels方法中的发布始终为0。我做错了什么?

谢谢。

将kendo DropDownListFor的值传递给另一个DropDownList For的读取操作

我真的不喜欢这个例子,所以我想我应该详细说明你将如何从你所拥有的,到什么应该起作用-既为了我自己的利益,也为了你的利益,还有其他人阅读本文:

首先,您需要ReleaseID:上的Name属性

@(Html.Kendo().DropDownListFor(model => model.ReleaseID)
    .Name("ReleaseID")  // <-- needs this line added
    .DataTextField("Value")
    .DataValueField("Key")
    .DataSource(ds => ds 
        .Read(read=>read.Action("GetReleases", "Task"))
     ) 
 ) 

接下来,您需要输入.Data(),指定一个提供ReleaseID的函数,从另一个下拉列表中指示您正在执行.ServerFiltering(true).Cascade,并创建您指定的函数,以Json格式返回级联中使用的发布ID:

@(Html.Kendo().DropDownListFor(model => model.MarketModelID)
    .Events(e => e.Select("onSelectMarketModel"))
    .Template("<span data-title='Model Description: #: data.Item3 #'>#: data.Item2 # </span>")
    .DataTextField("Item2")
    .DataValueField("Item1")
    .DataSource(source => 
    {
         source.Read(read => 
         {
             read.Action("GetMarketModels", "Task").Data("filterMarket");
         })
         .ServerFiltering(true);
     })
     .CascadeFrom("ReleaseID")  // <-- "Name" attribute, from above
     .Value(Model.MarketModelID != null ? Model.MarketModelID.ToString() : "1")
)
<script>
    function filterMarket() {
        return {
            strReleaseID : $("#ReleaseID").val()
        }
    }
</script>

然后,在任务控制器中,输入变量:

public JsonResult GetMarketModels(string strReleaseID)
{
    int releaseID = int.Parse(strReleaseID);
    var data = db.MarketModels.Where(t => t.ReleaseID == releaseID).ToList();
    return Json(data, JsonRequestBehavior.AllowGet);
}

请注意,您在JavaScript中为参数指定的名称必须与控制器函数中的名称匹配。这个方法是我在应用程序中用来级联下拉列表的方法,对我来说很有效。

您需要使用级联DropDownLists。在这里你可以找到一个如何创建级联DropDownLists:的例子

级联下拉列表