Search code examples
javascriptc#asp.netkendo-gridkendo-mvvm

Values cannot pass from kendo grid to Entity class?


Here i my c sharp code of controller api class DefComapny whose value are always null while posting a data from kendo grid thats why not entering any thing to database?

   [HttpPost]
    public void SaveDefCompny()
    {
   var result = new List<DefCompany>();
        using (var data = new RPDBEntities())
        {
            DefCompanyDTO productViewModel = new DefCompanyDTO();

                var product = new DefCompany
                {
  //same problem of all entites  getting no value from grid

                 Id = productViewModel.Id, // getting no value from grid
                    CurrentCurrencyCode = productViewModel.CurrentCurrencyCode,
                    ShortName= productViewModel.ShortName,
                    FullName= productViewModel.FullName,
                    ContactPerson= productViewModel.ContactPerson,
                    Address1= productViewModel.Address1,
                    CompanyCity= productViewModel.CompanyCity,
                    CompanyState= productViewModel.CompanyState,
                   CompanyCountry= productViewModel.CompanyCountry,
                   ZipPostCode= productViewModel.ZipPostCode,
                   TelArea= productViewModel.TelArea

                };
               result.Add(product);
               data.DefCompanies.Add(product);

             data.SaveChanges();
        }

    }

here is my viewmodel code

   document.onreadystatechange = function () {
var viewModel = kendo.observable({

    products: new kendo.data.DataSource({

    schema: {
       //data:"Data",
        total: "Count",

        model: {
            Id: "Id",
            fields: {
                Id: { editable: true, type: "int" },
                ShortName: { editable:true, type: "string" },
                FullName: { editable: true, type: "string" },
                ContactPerson: { editable: true, type: "string" },
                CurrentCurrencyCode: { editable: true, type: "int" },
                Adress1: { editable: true, type: "string" },
                CompanyState: { editable: true, type: "string" },

                CompanyCity: { editable: true, type: "string" },
                CompanyCountry: { editable: true, type: "string" },
                ZipPostCode: { editable: true, type: "string" },
                TelArea: { editable: true, type: "string" }

            }
        }
    },
    batch: true,

    transport: {
        read: {
            url: "/api/Companies/GetAllCompanies",
            dataType: "json"
        },
        create:{

            url: "/api/Companies/SaveDefCompny", 
            dataType: "json"
        },
        update: {
            url: "/api/Companies/SaveDefCompny", // here you need correct api url
            dataType: "json"
        },
        destroy: {
            url: "/api/Companies/Delete", // here you need correct api url
            dataType: "json"
        },
        parameterMap: function (data, operation) {
            if (operation !== "read" && data) {
                 return  kendo.stringify(data) ;


            }
        }
    }

})
});
kendo.bind(document.getElementById("example"), viewModel);


}

how should i pass my inline kendo grid values to my controller so that it save it in database?


Solution

  • Check Kendo documentation and see what kind of parameters SaveDefCompny should expect. You should then be able to read whatever you require using those parameters.

    url: "/api/Companies/SaveDefCompny", dataType: "json"
    

    This most likely is sending your controller method the required data in json format. Again: your answer lies in the Kendo documentation.

    EDIT: See this and this.

    From their example:

    public ActionResult Products_Create([DataSourceRequest]DataSourceRequest request, ProductViewModel product)
    {
        if (ModelState.IsValid)
        {
            using (var northwind = new NorthwindEntities())
            {
                // Create a new Product entity and set its properties from the posted ProductViewModel
                var entity = new Product
                {
                    ProductName = product.ProductName,
                    UnitsInStock = product.UnitsInStock
                };
                // Add the entity
                northwind.Products.Add(entity);
                // Insert the entity in the database
                northwind.SaveChanges();
                // Get the ProductID generated by the database
                product.ProductID = entity.ProductID;
            }
        }
        // Return the inserted product. The grid needs the generated ProductID. Also return any validation errors.
        return Json(new[] { product }.ToDataSourceResult(request, ModelState));
    }