This is a migrated thread and some comments may be shown as answers.

Kendo Grid DataSource Repeating CRUD Calls (Returning ID From Server!!)

1 Answer 247 Views
Data Source
This is a migrated thread and some comments may be shown as answers.
Vi Le
Top achievements
Rank 1
Vi Le asked on 18 Jun 2016, 10:15 PM

I'm having an issue with CRUD calls being repeated. It only happens if I make two CRUD calls in a row, the second one pulls in the first one's data. For example, if I have a grid that has three records on it:

1. I hit delete on the first record which successfully deletes that record, no issues (note that I AM returning the ID of that record back to the grid)

2. I hit delete on the second record and it uses that model's data of the first record. Entity framework of course throws an error because it can no longer find that entity since it was deleted in the first call.

controller:

public ActionResult CostsDestroy(string models)
{
    JavaScriptSerializer serializer = new JavaScriptSerializer();
    CapitalLeaseCostModel model = new CapitalLeaseCostModel();
    var CapitalLeaseCostModelArray = serializer.Deserialize<CapitalLeaseCostModel>(models);
    model = AccountingService.DeleteCapitalLeaseCost(CapitalLeaseCostModelArray);
 
    return PartialView(Json(model));
}

 

View:

@model DataNet.Common.Models.CapitalLease.CapitalLeaseCostModel
 
 
@*grid script*@
<script>
 
    $(document).ready(function () {
 
        dataSource = new kendo.data.DataSource({
            transport: {
                read: {
                    url: "/CapitalLease/CostsRead",
                    dataType: "json"
                },
                update: {
                    url: "/CapitalLease/CostsUpdate",
                    dataType: "json",
                    type: "POST",
                    complete: function (e) {
                        var grid = $('#capitalizedCostGrid').data("kendoGrid");
                        grid.dataSource.read();
                    }
                },
                destroy: {
                    url: "/CapitalLease/CostsDestroy",
                    dataType: "json",
                    type: "POST",
                    complete: function (e) {
                        e.success(data);
                        var grid = $('#capitalizedCostGrid').data("kendoGrid");
                        grid.dataSource.read();
                    }
                },
                create: {
                    url: "/CapitalLease/CostsCreate",
                    dataType: "json",
                    type: "POST",
                    complete: function (e) {
                        e.success(data);
                        var grid = $('#capitalizedCostGrid').data("kendoGrid");
                        grid.dataSource.read();
                    }
                },
                parameterMap: function (options, operation) {
                    if (operation !== "read" && options.models) {
                        options.models[0].StartDate = kendo.toString(kendo.parseDate(options.models[0].StartDate, 'yyyy-MM-dd'), 'MM/dd/yyyy');
                        options.models[0].EndDate = kendo.toString(kendo.parseDate(options.models[0].EndDate, 'yyyy-MM-dd'), 'MM/dd/yyyy');
                    }
                    if(operation === "create" && options.models){
                        options.models[0].EscalationTypeID = options.models[0].EscalationTypeID.ID;
                        options.models[0].EscalationFrequencyID = options.models[0].EscalationFrequencyID.ID;
                    }
                    if (operation === "destroy" && options.models) {
                        return { models: kendo.stringify(options.models[0]) };
                    } else {
                        return { models: kendo.stringify(options.models), keyID: 106715 };
                    }
                }
 
 
            },
            batch: true,
            pageSize: 20,
            schema: {
                model: {
                    id: "ID",
                    fields: {
                        ID: { editable: true, nullable: false, defaultValue: -1 },
                        Reason: { validation: { required: true } },
                        CapitalLeaseEscalationType: {
                            defaultValue: {
                                ID: 1,
                                EscalationType: "No Escalation"
                            }
                        },
                        CapitalLeaseEscalationFrequency: {
                            defaultValue: {
                                ID: 1,
                                EscalationFrequency: "Monthly"
                            }
                        },
                        EscalationTypeID: {
                            defaultValue: {
                                ID: 1,
                                EscalationType: "No Escalation"
                            }
                        },
                        EscalationFrequencyID: {
                            defaultValue: {
                                ID: 1,
                                EscalationFrequency: "Monthly"
                            }
                        }
                    }
                }
            }
        });
 
        $("#capitalizedCostGrid").kendoGrid({
            dataSource: dataSource,
            toolbar: ["create"],
            columns: [
            {
                field: "ID",
                title: "ID",
                hidden: true
 
            },
            {
                field: "Reason",
                title: "Reason"
            },
            {
                field: "Amount",
                title: "Amount",
                format: "{0:c}"
            },
            {
                field: "StartDate",
                title: "Start Date",
                type: "date",
                format: "{0:yyyy-MM-dd}",
                template: "#= kendo.toString(kendo.parseDate(data.StartDate, 'yyyy-MM-dd'), 'MM/dd/yyyy') #",
                editor: dateTimeEditor
                 
            },
            {
                field: "EndDate",
                title: "End Date",
                type: "date",
                format: "{0:yyyy-MM-dd}",
                template: "#= kendo.toString(kendo.parseDate(data.EndDate, 'yyyy-MM-dd'), 'MM/dd/yyyy') #",
                editor: dateTimeEditor
            },
            {
                field: "EscalationTypeID",
                title: "Escalation Type",
                editor: escalationTypeDropDownEditor,
                template: "#=CapitalLeaseEscalationType.EscalationType#"
            },
            {
                field: "EscalationFrequencyID",
                title: "Escalation Frequency",
                editor: frequencyTypeDropDownEditor,
                template: "#=CapitalLeaseEscalationFrequency.EscalationFrequency#"
            },
            {
                field: "EscalationPercentage",
                title: "Escalation Percent",
                template: "<div> #= kendo.toString(data.EscalationPercentage / 100, 'p0') #</div>"
            },
            {
                field: "EscalationMonetary",
                title: "Monetary Escalation",
                format: "{0:c}"
            },
            {
                command: ["edit", "destroy"], title: "Edit", width: "200px"
            }
            ],
            editable: "popup",
            edit: function (e) {
                e.container.find(".k-edit-label:first").hide();
                e.container.find(".k-edit-field:first").hide();
            },
            height: 200,
            autoSync: true
 
        })
 
        @*Attaches to Escalation type drop down list*@
        function escalationTypeDropDownEditor(container, options) {
        $('<input required data-text-field="EscalationType" data-value-field="ID" data-bind="value:' + options.field + '"/>')
            .appendTo(container)
            .kendoDropDownList({
                autoBind: true,
                dataSource: {
                    type: "json",
                    transport: {
                        read: "/CapitalLease/CostsEscalationTypeRead"
                    }
                }
            });
        }
 
        @*Attaches to Escalation Frequency drop down list*@
        function frequencyTypeDropDownEditor(container, options) {
        $('<input required data-text-field="EscalationFrequency" data-value-field="ID" data-bind="value:' + options.field + '"/>')
            .appendTo(container)
            .kendoDropDownList({
                autoBind: true,
                dataSource: {
                    type: "json",
                    transport: {
                        read: "/CapitalLease/CostsEscalationFrequencyRead"
                    }
                }
            });
        }
 
        @*Formats the date-picker in-grid*@
        function dateTimeEditor(container, options) {
        $('<input data-text-field="' + options.field + '" data-value-field="' + options.field + '" data-bind="value:' + options.field + '" data-format="' + options.format + '"/>')
                .appendTo(container)
                .kendoDatePicker({});
        }
 
    });
 
 
</script>
 
<style>
    .k-grid  .k-grid-header  .k-header  .k-link {
        height: auto;
    }
   
    .k-grid  .k-grid-header  .k-header {
        white-space: normal;
    }
</style>
 
 
@*Rent Information*@
<p class="title">Section Two - Lease Costs to Capitalize</p>
<div style="padding:15px;">
    <div id="costsRowOne">
        <div id="capitalizedCostGrid" class="inline-control"></div>
    </div>
</div>

 

What am i missing here. 

 

1 Answer, 1 is accepted

Sort by
0
Vi Le
Top achievements
Rank 1
answered on 18 Jun 2016, 10:51 PM
I figured it out - the response back was an error instead of the correct JSON.
Tags
Data Source
Asked by
Vi Le
Top achievements
Rank 1
Answers by
Vi Le
Top achievements
Rank 1
Share this question
or