基于另一个剑道组合框填充剑道MVC组合框

汤姆

我试图根据另一个组合框的选择填充一个组合框的值。我在MVC 5应用程序中使用kendo mvc组合​​框。就我而言,我试图根据对SalesOrganisation组合框的选择来填充Sales Office组合框。为此,我需要调用SalesOffice组合的控制器方法并传递国家/地区代码值。我已经针对销售组织的下拉控件的更改事件编写了一个ajax方法。它调用控制器方法。我可以看到方法触发,但是当我对javascript代码中的数据发出警报时,该值显示[object] [object]。但是状态显示为成功不确定出什么问题了。如何获得销售办公室下拉列表

组合框

  <div class="form-group">
                @Html.LabelFor(model => model.Company, htmlAttributes: new { @class = "control-label col-md-4" })
                <div class="col-md-6">
                    <div class="editor-field">
                        @(Html.Kendo().ComboBoxFor(model => model.Company)
                            .Name("SalesOrganisation")
                            .HtmlAttributes(new { style = "width:300px" })
                            .DataTextField("Company")
                            .DataValueField("CountryCode")

                            .DataSource(dataSource => dataSource
                            .Read(read => read.Action("RequestHeader_SalesOrganisation", "Request").Type(HttpVerbs.Post))

                            )
                             .Events(e =>
                             {
                                 e.Change("onChange");
                             })
                        )
                    </div>
                    @Html.ValidationMessageFor(model => model.Company, "", new { @class = "text-danger" })
                </div>
            </div>
            <div class="clearfix"></div>
            <div class="form-group">
                @Html.LabelFor(model => model.SalesOffice, htmlAttributes: new { @class = "control-label col-md-4" })
                <div class="col-md-6">
                    <div class="editor-field">
                        @(Html.Kendo().ComboBoxFor(model => model.SalesOffice)
                            .Name("SalesOffice")
                            .HtmlAttributes(new { style = "width:300px" })
                            .DataTextField("SalesOffice")
                            .DataValueField("SalesOfficeID")

                            .DataSource(dataSource => dataSource
                            .Read(read => read.Action("RequestHeader_SalesOffice", "Request").Type(HttpVerbs.Post))
                            )
                        )
                    </div>
                    @Html.ValidationMessageFor(model => model.SalesOffice, "", new { @class = "text-danger" })
                </div>
            </div>

SalesOffice控制器方法

    public ActionResult RequestHeader_SalesOffice(string id)
            {
                var response = requestRepository.GetSalesOffice(id).AsQueryable().ProjectTo<SalesOfficeViewModel>();

                var jsonResult = Json(response, JsonRequestBehavior.AllowGet);
                jsonResult.MaxJsonLength = int.MaxValue;
                return jsonResult;
            }

jQuery的

 function onChange() {

        alert($('#SalesOrganisation').val());

        var ServiceUrl = "/CC.GRP.MCRequest/Request/RequestHeader_SalesOffice?id=" + $('#SalesOrganisation').val();
        var content = '';
        $.support.cors = true;

        $.ajax({
            type: 'Post',
            url: ServiceUrl,
            async: true,
            cache: false,
            crossDomain: true,
            contentType: "application/json; charset=utf-8",
            dataType: 'json',
            error: function (xhr, err) {
            },
            success: function (data, status) {
                $('#SalesOffice').val(data);
                alert(data);
                alert(status);
            }
        });
    }
戴维·肖特霍斯

因此,根据您的特定方案。顶部组合框应控制第二个组合框中的选择项。在这种情况下,使用cascading组合框功能将是最简单的方法,并且还会减少您拥有的代码量。

因此,顶部组合框可以消除更改事件。

第二个我们对此稍作更改:

@(Html.Kendo().ComboBoxFor(model => model.SalesOffice)
                            .Name("SalesOffice")
                            .HtmlAttributes(new { style = "width:300px" })
                            .DataTextField("SalesOffice")
                            .DataValueField("SalesOfficeID")

                            .DataSource(dataSource => dataSource
                                .Read(read =>
                                {
                                    read.Action("RequestHeader_SalesOffice", "Request")
                                        .Type(HttpVerbs.Post)
                                        .Data("GetFilterOption"); <-- This Bit
                                })
                                ).CascadeFrom("SalesOrganisation") //<--This Bit

)

然后,我们添加名为的javascript函数GetFilterOption,该函数从顶部的组合框中返回选定的值。

function GetFilterOption(){
    return { id: $('#SalesOrganisation').val() }

}

然后,这将返回新结果集以供您绑定到组合框,并允许您从新收集的结果中选择值。

当前解决方案不起作用的原因是,您要带回选择列表,并将其绑定到值而不是基础数据源。

因此,如果您只想更改JavaScript代码,则可以执行以下操作:

success: function (data, status) {
              //  $('#SalesOffice').val(data); <-- FROM THIS TO
                $('#SalesOffice').data('kendoComboBox').setDataSource(data); 
                alert(data);
                alert(status);
            }

希望能回答您的问题。任何问题都会让我知道,我将更新答案以反映所有更改。

编辑

经过与Tom的反复试验和错误讨论之后,我们找到了添加.Filtering(“ Contains”)的解决方案

然后在组合框中使用.ServerFiltering(true),因此最终结果如下:

@(Html.Kendo().ComboBoxFor(model => model.SalesOffice)
                            .Name("SalesOffice")
                            .HtmlAttributes(new { style = "width:300px" })
                            .DataTextField("SalesOffice")
                            .DataValueField("SalesOfficeID")
                            .Filter("Contains")
                            .DataSource(dataSource => dataSource
                                .Read(read =>
                                {
                                    read.Action("RequestHeader_SalesOffice", "Request")
                                        .Type(HttpVerbs.Post)
                                        .Data("GetFilterOption"); <-- This Bit
                                })
                                 .ServerFiltering(true)
                                ).CascadeFrom("SalesOrganisation") //<--This Bit

)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

C# 使用基于另一个组合框的 XML 数据填充组合框

尝试根据选择另一个组合框填充两个组合框

组合框到另一个组合框

如何用另一个组合框的选择填充组合框?JavaFX

根据在Wordpress中另一个组合框中的选择填充组合框

根据选择的另一个组合框填充组合框 - Powershell

Silverlight C#:如何基于另一个组合框筛选组合框?

另一个组合框内的组合框

从组合框传递值,该组合框从ObservableCollection填充到另一个方法UWP中

Excel VBA-在选择另一个组合框的情况下填充组合框

如何获取组合框中所选项目的ID并用它填充另一个组合框?

从另一个类的列表中填充组合框

根据 extjs 网格中的另一个组合框填充字段

从另一个组合框中选择时,更改另一个组合框项目列表

在php中选择另一个组合框时,如何使组合框可见?

在另一个组合框中插入数字时自动生成组合框

选择组合框并在另一个组合框 Tkinter 中显示值

通过另一个组合框的值成员筛选组合框

在选择另一个组合框之后,仅在组合框中显示更新的值

如何根据另一个组合框条目列出组合框数据

在sharepoint的Nintex中隐藏和显示组合框的另一个组合框值

用仅以选定项目开头的结果从另一个组合框中的第一个字符填充组合框

PHP:使用MySQL数据库从另一个组合框中选择一个选项后,填充组合框

如何根据vba中另一个文本框的数据填充组合框中的数据

剑道组合框始终选择第一项

如何刷新angularjs中的剑道组合框?

如何清除剑道组合框的值

如何从一个组合框向另一个组合框添加值

使用组合框出现另一个组合框C#