【问题标题】:Unable to get the value of the combo set to the viewmodel无法获取组合设置为视图模型的值
【发布时间】:2017-04-12 09:36:55
【问题描述】:

我已经实现了剑道下拉的级联功能。在尝试保存信息时,我无法在我的视图模型中获得组合的值。如果我评论 name 属性,我会得到值,但是我需要 name 属性才能使级联功能起作用。我正在尝试使用 jquery 设置模型值但出现错误的解决方法。谁能告诉我如何解决这个问题。

销售组织组合

<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.CountryCode)
    .Name("SalesOrganisation")
    .HtmlAttributes(new { style = "width:100%" })
    .DataTextField("CompanyCodeCompany")
    .DataValueField("CountryCode")
    .Filter("contains")
    .MinLength(3)
    .DataSource(dataSource => dataSource
    .Read(read => read.Action("RequestHeader_SalesOrganisation", "Request").Type(HttpVerbs.Post))
    .ServerFiltering(true)
    )

                    )
                </div>
                @Html.ValidationMessageFor(model => model.Company, "", new { @class = "text-danger" })
            </div>
        </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.SalesOfficeID)
             //  .Name("SalesOffice")
             .HtmlAttributes(new { style = "width:100%" })
            .DataTextField("SalesOffice")
            .DataValueField("SalesOfficeID")
            .AutoBind(false)
            .Value("")
            .DataSource(dataSource => dataSource
                .Read(read =>
                {
                    read.Action("RequestHeader_SalesOffice", "Request")
                        .Type(HttpVerbs.Post)
                        .Data("GetFilterOption");
                }).ServerFiltering(true)
                ).CascadeFrom("SalesOrganisation").Filter("contains")

                            )
                        </div>
                        @Html.ValidationMessageFor(model => model.SalesOffice, "", new { @class = "text-danger" })
                    </div>
                </div>

用于级联功能的Javascript

 function GetFilterOption() {

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

    }

Javascript - 尝试设置不起作用的模型

function GetFilterOption() {
        var countryCode = $('#SalesOrganisation').val();
        var model = $('#SalesOrganisation').data('kendoComboBox');
        model.value = countryCode;
         return id = countryCode;
    }

【问题讨论】:

    标签: kendo-ui asp.net-mvc-5 kendo-asp.net-mvc kendo-combobox


    【解决方案1】:

    当你使用 .ComboBoxFor() 时,你不应该使用 .Name()。

    当您使用 .ComboBoxFor(m => m.FieldName) 时,kendo 的 Razor 助手实现将 id/name 属性设置为“FieldName”,并且匹配模型的名称字段。

    如果您随后使用 .Name("SomeOtherFieldName"),则将 id/name 属性更改为“SomeOtherFieldName”,并且它不再与您的模型的字段名称匹配,这就是为什么您不再获取价值。

    您想要做的是使用 .Name() 并适当地设置 .CascadeFrom(),即

    @(Html.Kendo().ComboBoxFor(model => model.CountryCode)
    ....
    
    @(Html.Kendo().ComboBoxFor(model => model.SalesOfficeID)
        .CascadeFrom("CountryCode")
    
    function GetFilterOption() {
        return {
            id: $('#CountryCode').val()
        }
    }
    

    【讨论】:

    • 是的,可以,但是我有另一个组合,它根据这个组合的文本字段进行过滤。我在那里做什么 function GetFilterOption1() { return { id: $('[name = "SalesOrganisation"]').data("kendoComboBox").text().split('-')[0] } }
    • 我为另一个过滤器选项分配了国家代码,它似乎有效。这是正确的做法吗
    • 是的,您必须使用单一且一致的名称来引用您的输入/元素/小部件,这是您使用 XXXXFor() 剃须刀助手时 ViewModel 字段的名称。
    • 发生了一件很奇怪的事情。几个小时前还在工作的东西现在不工作了。第二个孩子组合正在工作。正在工作的第一个子组合现在不起作用。我没有看到 javascript 方法 GetFilterOption 触发。因此,当控制器处执行中断时,参数值为 null。
    猜你喜欢
    • 2012-07-08
    • 2022-01-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-03
    • 1970-01-01
    • 2014-10-09
    • 1970-01-01
    相关资源
    最近更新 更多