We use cookies to give you the best experience on our website. If you continue to browse, then you agree to our privacy policy and cookie policy. (Last updated on: June 24, 2019).
Unfortunately, activation email could not send to your email. Please try again.
Syncfusion Feedback

Edit Params are null

Thread ID:

Created:

Updated:

Platform:

Replies:

146421 Aug 2,2019 05:43 PM UTC Aug 5,2019 05:52 AM UTC ASP.NET Core - EJ 2 2
loading
Tags: Scheduler
Brad Shannon
Asked On August 2, 2019 05:43 PM UTC

I'm getting null edit parameter objects when I do an edit of an appointment in Scheduler.  I tried removing the [Key] attribute on the Schedule object like I've seen recommended on this forum before, but I got the same results.  The 'value' property is populated with 'UpdateData' but everything else is null.

Schedule.cs
    public class Schedule : ModelBase
    {
        [Key]
        public int ScheduleID { get; set; }
        public int Id { get { return ScheduleID; } }

        [Display(Name = "Route")]
        public int RouteID { get; set; }
        public virtual Route Route { get; set; }

        [Display(Name = "User")]
        public string UserID { get; set; }
        public virtual User User { get; set; }

        public string Subject { get; set; }
        public DateTime StartTime { get; set; }
        public DateTime EndTime { get; set; }
        public string StartTimezone { get; set; }
        public string EndTimezone { get; set; }
        public bool IsAllDay { get; set; }
        public string RecurrenceRule { get; set; }
        public string RecurrenceID { get; set; }
        public string RecurrenceException { get; set; }
    }

SchedulesController.cs - UpdateData method
        [HttpPost]
        public JsonResult UpdateData(EditParams param)
        {
            if (param.action == "insert" || (param.action == "batch" && param.added != null)) // this block of code will execute while inserting the appointments
            {
                var value = (param.action == "insert") ? param.value : param.added[0];
                int intMax = _context.Schedule.Select(x => x.ScheduleID).DefaultIfEmpty(0).Max();
                DateTime startTime = Convert.ToDateTime(value.StartTime);
                DateTime endTime = Convert.ToDateTime(value.EndTime);
                Schedule appointment = new Schedule()
                {
                    ScheduleID = intMax + 1,
                    StartTime = startTime,
                    EndTime = endTime,
                    Subject = value.Subject,
                    IsAllDay = value.IsAllDay,
                    StartTimezone = value.StartTimezone,
                    EndTimezone = value.EndTimezone,
                    RecurrenceRule = value.RecurrenceRule,
                    RecurrenceID = value.RecurrenceID,
                    RecurrenceException = value.RecurrenceException
                };
                _context.Schedule.Add(appointment);
                _context.SaveChanges();
            }
            if (param.action == "UpdateData" || (param.action == "Batch" && param.changed != null)) // this block of code will execute while updating the appointment
            {
                var value = (param.action == "UpdateData") ? param.value : param.changed[0];
                var filterData = _context.Schedule.Where(c => c.ScheduleID == Convert.ToInt32(value.ScheduleID));
                if (filterData.Count() > 0)
                {
                    DateTime startTime = Convert.ToDateTime(value.StartTime);
                    DateTime endTime = Convert.ToDateTime(value.EndTime);
                    Schedule appointment = _context.Schedule.Single(A => A.ScheduleID == Convert.ToInt32(value.Id));
                    appointment.StartTime = startTime;
                    appointment.EndTime = endTime;
                    appointment.StartTimezone = value.StartTimezone;
                    appointment.EndTimezone = value.EndTimezone;
                    appointment.Subject = value.Subject;
                    appointment.IsAllDay = value.IsAllDay;
                    appointment.RecurrenceRule = value.RecurrenceRule;
                    appointment.RecurrenceID = value.RecurrenceID;
                    appointment.RecurrenceException = value.RecurrenceException;
                }
                _context.SaveChanges();
            }
            if (param.action == "remove" || (param.action == "batch" && param.deleted != null)) // this block of code will execute while removing the appointment
            {
                if (param.action == "remove")
                {
                    int key = Convert.ToInt32(param.key);
                    Schedule appointment = _context.Schedule.Where(c => c.ScheduleID == key).FirstOrDefault();
                    if (appointment != null) _context.Schedule.Remove(appointment);
                }
                else
                {
                    foreach (var apps in param.deleted)
                    {
                        Schedule appointment = _context.Schedule.Where(c => c.ScheduleID == apps.ScheduleID).FirstOrDefault();
                        if (apps != null) _context.Schedule.Remove(appointment);
                    }
                }
                _context.SaveChanges();
            }
            var data = _context.Schedule.ToList();
            return Json(data);
        }

SchedulesController.cs - EditParams class
    public class EditParams
    {
        public string key { get; set; }
        public string action { get; set; }
        public List<Schedule> added { get; set; }
        public List<Schedule> changed { get; set; }
        public List<Schedule> deleted { get; set; }
        public Schedule value { get; set; }
    }

Index.cshtml
@using Syncfusion.EJ2
@model IEnumerable<DotNetCoreSqlDb.Models.Schedule>

@{
    ViewData["Title"] = "Index";
    Layout = "~/Views/Shared/_Layout.cshtml";
    var dataManager = new DataManager()
    {
        Url = "Schedules/LoadData",
        Adaptor = "UrlAdaptor",
        CrudUrl = "Schedules/UpdateData",
        CrossDomain = true
    };
}

<div class="row">
    <ejs-schedule id="schedule" height="550" selectedDate="new DateTime(2019, 8, 2)">
        <e-schedule-eventsettings dataSource="dataManager">
        </e-schedule-eventsettings>
    </ejs-schedule>
</div>


Brad Shannon
Replied On August 2, 2019 06:53 PM UTC

I found the fix in this thread: https://www.syncfusion.com/forums/143650/crud-operations-not-working

This...

public JsonResult UpdateData(EditParams param)

Should be this...

public JsonResult UpdateData([FromBody]EditParams param)

Karthigeyan Krishnamurthi [Syncfusion]
Replied On August 5, 2019 05:52 AM UTC

Hi Brad, 

Syncfusion greetings. 

Yes, that is the correct way and we're glad you discovered it yourself. 

Regards, 
Karthi 


CONFIRMATION

This post will be permanently deleted. Are you sure you want to continue?

Sorry, An error occured while processing your request. Please try again later.

Please sign in to access our forum

This page will automatically be redirected to the sign-in page in 10 seconds.

Warning Icon You are using an outdated version of Internet Explorer that may not display all features of this and other websites. Upgrade to Internet Explorer 8 or newer for a better experience.Close Icon

Live Chat Icon For mobile
Live Chat Icon