Как отключить каскадное раскрывающееся меню кендо только при редактировании - PullRequest
0 голосов
/ 06 августа 2020

У меня есть два каскадных раскрывающихся списка Kendo в шаблоне сетки. Они работают нормально, пока я не попытаюсь отключить их при редактировании.

Я хочу разрешить пользователю использовать раскрывающиеся списки как обычно при создании новой записи (это работает), однако, когда выбран параметр редактирования, я хочу, чтобы раскрывающиеся списки были заполнены информацией о модели из выбранной записи, но я хочу, чтобы все три были отключены, только если это редактирование.

Моя сетка выглядит следующим образом:

@(Html.Kendo().Grid<OrderTypeRulesClass>()
                                                            .Name("OrderTypeCapacityGrid")
                                                            .Columns(columns =>
                                                            {
                                                                columns.Bound(p => p.OrderTypeid).Title("Order Type ID").Hidden(true).Width(88);
                                                                columns.Bound(p => p.CapacityOrderTypeid).Title("Order Type ID").Hidden(true).Width(88);
                                                                columns.Bound(p => p.ClientID).Hidden(true).Title("Client ID").Width(90);
                                                                columns.Bound(p => p.SiteID).Hidden(true).Title("Site ID").Width(90);
                                                                columns.Bound(p => p.ClientName).Title("Client Name").Width(180);
                                                                columns.Bound(p => p.SiteName).Title("Site Name").Width(180);
                                                                columns.Bound(p => p.OrderCode).Title("Code").Width(90);
                                                                columns.Bound(p => p.OrderTypeDesc).Title("Description").Width(180);
                                                                columns.Bound(p => p.CapacityPerDay).Title("Capacity Per Day").Width(180);
                                                                columns.Bound(p => p.Constrained).Title("Constrained").Width(180);
                                                                if ((cCore.HasAction("CanEditOrderTypes") == true))
                                                                {
                                                                    columns.Command(command => { command.Edit().Text(" "); command.Destroy().Text(" "); }).Width(100);
                                                                }
                                                            })
                                                            .Groupable()
                                                            .Pageable()
                                                            .ToolBar(toolbar =>
                                                            {
                                                                if ((cCore.HasAction("CanEditOrderTypes") == true))
                                                                {
                                                                    toolbar.Create().Text("Add New Order Type Capacity");
                                                                }
                                                            })
                                                            .Editable(editable => editable
                                                                .Mode(Kendo.Mvc.UI.GridEditMode.PopUp)
                                                                .TemplateName("OrderTypeCapacity_Edit")
                                                                .Window(w => w.Title("Maintain Order Type Capacity"))
                                                                )
                                                            .Scrollable(s => s.Height("auto"))
                                                            .Filterable()
                                                            .ColumnMenu()
                                                            .AutoBind(true)
                                                            .Events(e => e.Edit("onEdit"))
                                                            .DataSource(d => d
                                                                .Ajax()
                                                                .Model(model => model.Id(p => p.CapacityOrderTypeid))
                                                                .Events(e => { e.RequestEnd("request_end_capacity"); e.Error("error_handler"); })
                                                        .Read(r => r.Action("SearchOrderTypeCapacity", "SystemMaintenance").Data("getSearchArgs_Capacity"))
                                                        .Create(update => update.Action("Popup_CreateOrderTypeCapacity", "SystemMaintenance"))
                                                        .Update(update => update.Action("Popup_UpdateOrderTypeCapacity", "SystemMaintenance"))
                                                        .Destroy(update => update.Action("Popup_DeleteOrderTypeCapacity", "SystemMaintenance"))
                                                        .PageSize(20)
                                                        )
                                                        )

У меня есть функция javascript на моем главном экране, где отображается сетка:

function onEdit(e)
    {
        debugger;
        if (e.model.isNew())
        {

        }
        else
        {
            //$("#SiteID").data("kendoDropDownList").value(e.model.SiteID);

            $("#ClientID").kendoDropDownList({
                enable: false
            });


        }
    }

Вид моего шаблона выглядит следующим образом:

    <table>
    <tr>
        <td>
            @Html.LabelFor(m => m.ClientName, "Client Name: ")
        </td>
        <td>
            @(Html.Kendo().DropDownListFor(m => m.ClientID)
                        .HtmlAttributes(new { style = "width:100%" })
                        .OptionLabel("Select a Client...")
                        .DataTextField("ClientName")
                        .DataValueField("ClientID")
                        .DataSource(source =>
                        {
                            source.Read(read =>
                            {
                                read.Action("RetrieveClients", "SystemMaintenance");
                            });
                        })
            )
        </td>
    </tr>
    <tr>
        <td>
            @Html.LabelFor(m => m.SiteName, "Site Name: ")
        </td>
        <td>
            <script>
                function filterSite() {
                    return {
                        ClientID: $("#ClientID").val()
                    };
                }
            </script>
            @(Html.Kendo().DropDownListFor(m => m.SiteID)
                                    .HtmlAttributes(new { style = "width:100%" })
                                    .OptionLabel("Select a Site...")
                                    .DataTextField("SiteName")
                                    .DataValueField("SiteID")
                                    .DataSource(source =>
                                    {
                                        source.Read(read =>
                                        {
                                            read.Action("RetrieveSites", "SystemMaintenance").Data("filterSite");
                                        })
                                    .ServerFiltering(true);
                                    })
                                    .Enable(false)
                                    .AutoBind(false)
                                    .CascadeFrom("ClientID")
            )

        </td>
    </tr>
    <tr>
        <td>
            @Html.LabelFor(m => m.OrderTypeDesc, "Order Type: ")
        </td>
        <td>
            @(Html.Kendo().DropDownListFor(m => m.CapacityOrderTypeid)
                .Name("CapacityOrderTypeid")
                .DataTextField("OrderTypeDesc")
                .DataValueField("CapacityOrderTypeid")
                .HtmlAttributes(new { style = "width:300px; " })
                .DataSource(source =>
                {
                    source.Read(read =>
                    {
                        read.Action("RetrieveCapacityOrderTypes", "SystemMaintenance");
                    }).ServerFiltering(true);
                })
                .OptionLabel("Select an Order Type...")
            )
        </td>
    </tr>
    <tr>
        <td>
            @Html.LabelFor(m => m.CapacityPerDay, "Capacity Per Day: ")
        </td>
        <td>
            @Html.EditorFor(m => m.CapacityPerDay, new { htmlAttributes = new { @type = "number", @min = "0", @step = "1", @value = "0" } })
        </td>
    </tr>
    <tr>
        <td>
            @Html.LabelFor(m => m.Constrained, "Capacity: ")
        </td>
        <td>
            @Html.CheckBoxFor(m => m.Constrained)
        </td>
    </tr>
</table>

Моя проблема заключается в том, что первое раскрывающееся меню заполняется выбранным значением модели, а второе - нет, если я отключу раскрывающийся список. Если я не отключу его, он заполнится правильно, и все в порядке. так я отключил его в неправильном месте? Как отключить каскадирование раскрывающихся списков только при редактировании.

...