Hello
I am currently trying out Kendo UI for jQuery. I have an issue with the combobox where it does not save a new item to my database once I added the item. It seems to save it in localstorage for the duration of the session. I am new to this, so I am probably doing something wrong here. I have followed the example from the demo and the backend service. Can someone please tell me what I am doing wrong here.
Here is the code for my view page which sits in my app:
<div id="countries">                            <div class="demo-section k-content">                                <h4>Enter a Country name</h4>                                <input id="countries" style="width: 100%;" />                                <div class="demo-hint">e.g. 'South Africa'</div>                            </div>                            <script id="noDataTemplate" type="text/x-kendo-tmpl">                                <div>                                    No data found. Do you want to add new item - '#: instance.text() #' ?                                </div>                                <br />                                <button class="k-button" onclick="addNew('#: instance.element[0].id #', '#: instance.text() #')">Add new item</button>                            </script>                            <script>                                function addNew(widgetId, value) {                                    var widget = $("#" + widgetId).getKendoComboBox();                                    var dataSource = widget.dataSource;                                    if (confirm("Are you sure you want to add this Country?")) {                                        dataSource.add({                                            CountryIdentifier: 0,                                            CountryName: value                                        });                                        dataSource.one("sync", function () {                                            widget.select(dataSource.view().length - 1);                                        });                                        dataSource.sync();                                    }                                };                            </script>                            <script>                                $(document).ready(function () {                                    var crudServiceBaseUrl = "http://localhost:49517";                                    var dataSource = new kendo.data.DataSource({                                        batch: true,                                        transport: {                                            read: {                                                url: crudServiceBaseUrl + "/Countries",                                                dataType: "jsonp"                                            },                                            create: {                                                url: crudServiceBaseUrl + "/Countries/Create",                                                dataType: "jsonp"                                            },                                            parameterMap: function (options, operation) {                                                if (operation !== "read" && options.models) {                                                    return { models: kendo.stringify(options.models) };                                                }                                            }                                        },                                        schema: {                                            model: {                                                id: "CountryIdentifier",                                                fields: {                                                    CountryIdentifier: { type: "number" },                                                    CountryName: { type: "string" }                                                }                                            }                                        }                                    });                                    $("#countries").kendoComboBox({                                        filter: "startswith",                                        dataTextField: "CountryName",                                        dataValueField: "CountryIdentifier",                                        dataSource: dataSource,                                        noDataTemplate: $("#noDataTemplate").html()                                    });                                });                            </script>                        </div>
Here is the code for my controller which sits in my API:
public class CountriesController : Controller    {        public ActionResult Index()        {            return this.Jsonp(CountryRepository.All());        }        public JsonResult Update()        {            var models = this.DeserializeObject<IEnumerable<CountryViewModel>>("models");            if (models != null)            {                CountryRepository.Update(models);            }            return this.Jsonp(models);        }        public ActionResult Destroy()        {            var countries = this.DeserializeObject<IEnumerable<CountryViewModel>>("models");            if (countries != null)            {                CountryRepository.Delete(countries);            }            return this.Jsonp(countries);        }        public ActionResult Create()        {            var countries = this.DeserializeObject<IEnumerable<CountryViewModel>>("models");            if (countries != null)            {                CountryRepository.Insert(countries);            }            return this.Jsonp(countries);        }        public JsonResult Read(int skip, int take)        {            IEnumerable<CountryViewModel> result = CountryRepository.All().OrderByDescending(p => p.CountryIdentifier);            result = result.Skip(skip).Take(take);            return this.Jsonp(result);        }    }
Here is the code for my ViewModel which sits in my API:
public class CountryViewModel    {        public int? CountryIdentifier { get; set; }        public string CountryName { get; set; }        public string CreatedBy { get; set; }        public string FK_CreatedByID { get; set; }        [DataType(DataType.Date)]        [DisplayFormat(DataFormatString = "{0:yyyy-MM-dd}", ApplyFormatInEditMode = true)]        public Nullable<System.DateTime> DateCreated { get; set; }        public string LastEditedBy { get; set; }        public string FK_LastEditedByID { get; set; }        [DataType(DataType.Date)]        [DisplayFormat(DataFormatString = "{0:yyyy-MM-dd}", ApplyFormatInEditMode = true)]        public Nullable<System.DateTime> DateLastEdited { get; set; }    }
And here is the code for my CountryRepository which sits in my API:
public static class CountryRepository    {        public static IList<CountryViewModel> All()        {            var result = HttpContext.Current.Session["Countries"] as IList<CountryViewModel>;            if (result == null)            {                HttpContext.Current.Session["Countries"] = result =                    new OldMutualDataContext().Countries.Select(c => new CountryViewModel                    {                        CountryIdentifier = c.CountryIdentifier,                        CountryName = c.CountryName,                        CreatedBy = c.CreatedBy,                        FK_CreatedByID = c.FK_CreatedByID,                        DateCreated = c.DateCreated,                        LastEditedBy = c.LastEditedBy,                        FK_LastEditedByID = c.FK_LastEditedByID,                        DateLastEdited = c.DateLastEdited                    }).ToList();            }            return result;        }        public static CountryViewModel One(Func<CountryViewModel, bool> predicate)        {            return All().FirstOrDefault(predicate);        }        public static void Insert(CountryViewModel country)        {            var first = All().OrderByDescending(c => c.CountryIdentifier).FirstOrDefault();            if (first != null)            {                country.CountryIdentifier = first.CountryIdentifier + 1;            }            else            {                country.CountryIdentifier = 0;            }            All().Insert(0, country);        }        public static void Insert(IEnumerable<CountryViewModel> countries)        {            foreach (var country in countries)            {                Insert(country);            }        }        public static void Update(CountryViewModel country)        {            var target = One(c => c.CountryIdentifier == country.CountryIdentifier);            if (target != null)            {                target.CountryName = country.CountryName;                target.LastEditedBy = country.LastEditedBy;                target.FK_LastEditedByID = country.FK_LastEditedByID;                target.DateLastEdited = country.DateLastEdited;            }        }        public static void Update(IEnumerable<CountryViewModel> countries)        {            foreach (var country in countries)            {                Update(country);            }        }        public static void Delete(CountryViewModel country)        {            var target = One(c => c.CountryIdentifier == country.CountryIdentifier);            if (target != null)            {                All().Remove(target);            }        }        public static void Delete(IEnumerable<CountryViewModel> countries)        {            foreach (var country in countries)            {                Delete(country);            }        }    }
Help would be appreciated.
Thank You