DEV Community

Cover image for ASP.NET Core Scheduler Features Every Developer Should Know
Lucy Muturi for Syncfusion, Inc.

Posted on • Originally published at syncfusion.com on

ASP.NET Core Scheduler Features Every Developer Should Know

TL;DR: Skip building scheduler logic from scratch. Syncfusion’s ASP.NET Core Scheduler delivers production-ready appointment management with recurring events, multi-timezone support, CRUD operations, flexible views, and multiple resources. All configured in hours, not weeks.

Building a scheduling application sounds straightforward until you start dealing with recurring meetings, timezone differences, resource allocation, and appointment management. What begins as a simple calendar requirement can quickly become a complex project with countless edge cases.

Instead of building scheduling functionality from scratch, you can leverage the Syncfusion ASP.NET Core Scheduler to handle these challenges out of the box. From managing recurring appointments to coordinating resources across teams, it provides the essential capabilities needed for modern scheduling applications.

In this article, we’ll explore five core Scheduler features that help developers build robust scheduling solutions faster:

  • Appointments
  • CRUD operations
  • Timezone support
  • Flexible views
  • Multiple resources

1. Appointments: The foundation of every scheduling application

Appointments are at the heart of any scheduling system. Whether you’re building a meeting planner, appointment booking platform, or resource management solution, the ability to create and organize events efficiently is essential.

Support for different event types

Not every event behaves the same way. Some occupy a specific time slot, while others span an entire day or repeat on a regular schedule.

The Scheduler supports:

  • Standard appointments for time-bound activities
  • All-day events for holidays, conferences, or milestones
  • Recurring events for meetings that occur on a predictable schedule
  • Multi-day events that span several dates

For example, instead of creating a weekly team meeting dozens of times, you can define a recurrence rule once and let the Scheduler generate future occurrences automatically.

C#

var appointment = new AppointmentData
{
    Subject = "Weekly Standup",
    StartTime = new DateTime(2024, 1, 15, 10, 0, 0),
    EndTime = new DateTime(2024, 1, 15, 10, 30, 0),
    RecurrenceRule = "FREQ=WEEKLY;INTERVAL=1;BYDAY=MO,WE,FR;COUNT=52"
};
Enter fullscreen mode Exit fullscreen mode

The RecurrenceRule property follows iCalendar (RFC 5545) specification. You can set occurrences to end after N times (COUNT=52), on a specific date (UNTIL=20241231), or never end.

Spanned Events (duration > 24 hours) display in the all-day row by default. Configure SpannedEventPlacement to render them inside time slots instead, which is useful for multi-day projects visible in the working area.

Custom fields and validation

Enforce data integrity by adding validation rules to each field. You can define validation rules directly in the Razor template using the validationRules attribute.

You can also define reusable validation rule objects in your controller and reference them across multiple fields:

C#

var validationRules = new Dictionary<string, object> { { "required", true } };
var locationRules = new Dictionary<string, object> 
{ 
    { "required", true }, 
    { "regex", new string[] { "^[a-zA-Z0-9-]*$", "Special characters not allowed" } } 
};
Enter fullscreen mode Exit fullscreen mode

This approach allows you to centralize validation logic and reuse the same rules across multiple scheduler instances when needed.

Prevention features

Prevent overlapping events by setting allowOverlap="false". The scheduler blocks conflicting event creation with an alert. This is critical for resource-constrained scenarios (meeting rooms, equipment).

Block specific time ranges (unavailable slots, maintenance windows) using events with isBlock="true". These appear visually distinct and prevent new appointments during those times.

2. CRUD operations: Managing the complete appointment lifecycle

A scheduling application is only useful if users can create, update, and remove appointments effortlessly.

Our Scheduler includes built-in support for the entire appointment lifecycle.

Creating events

Users can create appointments directly within the interface by selecting a date or time slot and entering event details such as:

  • Subject
  • Location
  • Start time
  • End time
  • Recurrence settings

Developers can also create appointments programmatically when business workflows require automated scheduling.

JavaScript

var scheduleObj = document.getElementById('schedule').ej2_instances[0];
var updatedEvent = {
    Id: 5,
    Subject: 'Updated Team Meeting',
    StartTime: new Date(2026, 6, 20, 15, 0, 0),
    EndTime: new Date(2026, 6, 20, 15, 30, 0)
};

scheduleObj.addEvent(updatedEvent);
Enter fullscreen mode Exit fullscreen mode

Server-side insert logic

When appointments are created, the scheduler sends an insert action request. Your backend processes this:

C#

if (param.action == "insert")
{
    var value = param.value;
    DateTime startTime = Convert.ToDateTime(value.StartTime);
    DateTime endTime = Convert.ToDateTime(value.EndTime);

    var appointment = new ScheduleEventData()
    {
        Id = db.ScheduleEventDatas.Max(p => p.Id) + 1,
        Subject = value.Subject,
        StartTime = startTime,
        EndTime = endTime,
        IsAllDay = value.IsAllDay,
        RecurrenceRule = value.RecurrenceRule
    };

    db.ScheduleEventDatas.InsertOnSubmit(appointment);
    db.SubmitChanges();
}
Enter fullscreen mode Exit fullscreen mode

Editing Appointments

Schedules change constantly. Meetings get rescheduled, durations are adjusted, and locations change.

The Scheduler makes it easy to edit existing appointments while preserving important metadata. You can edit appointments in 3 ways.

  • Normal events: Double-click to edit, then save changes.
  • Recurring events: Events can be modified either as a single occurrence or as part of the entire series.
  • Method: You can edit appointments programmatically using the saveEvent method.

JavaScript

var scheduleObj = document.getElementById('schedule').ej2_instances[0];
var updatedEvent = {
    Id: 5,
    Subject: 'Updated Team Meeting',
    StartTime: new Date(2026, 6, 20, 16, 0, 0),
    EndTime: new Date(2026, 6, 20, 16, 30, 0)
};
scheduleObj.saveEvent(updatedEvent);
Enter fullscreen mode Exit fullscreen mode

Deleting Appointments

Appointments can be removed individually or deleted as part of a recurring series. This flexibility helps maintain accurate schedules while reducing the complexity of managing event history.

By handling these operations automatically, developers can spend less time building infrastructure and more time delivering business value.

For more information, see how CRUD operations in the Scheduler support full appointment lifecycle management through multiple approaches.

3. Timezone support: Scheduling across location boundaries

Timezone and localization support ensures accurate scheduling across regions. Syncfusion manages the time zone conversions automatically.

Scheduler-level timezones

Organizations that operate from a central office often need all events displayed according to a single timezone.

The Scheduler allows you to define a default timezone so every user sees appointments consistently, regardless of their local device settings.

CSHTML

<ejs-schedule id="schedule" timezone="America/New_York" selectedDate="new DateTime(2024, 1, 15)">
    <e-schedule-eventsettings dataSource="@ViewBag.appointments"></e-schedule-eventsettings>
</ejs-schedule>
Enter fullscreen mode Exit fullscreen mode

Now, every user sees appointments in Eastern Time, regardless of their local timezone. Useful for centralized operations like trading, broadcasts, or corporate headquarters scheduling.

Event-level timezone

Some applications require appointments to be tied to different geographic locations.

For example:

  • A meeting in New York
  • A training session in London
  • A conference in Singapore

Each event can maintain its own timezone while the Scheduler automatically converts and displays the correct local time for every user.

CSHTML

<e-schedule-eventsettings dataSource="@ViewBag.appointments">
    <e-eventsettings-fields id="Id">
        <e-field-starttime name="StartTime"></e-field-starttime>
        <e-field-starttimezone name="StartTimeZone"></e-field-starttimezone>
        <e-field-endtimezone name="EndTimeZone"></e-field-endtimezone>
    </e-eventsettings-fields>
</e-schedule-eventsettings>
Enter fullscreen mode Exit fullscreen mode

An appointment at 9:00 AM in “America/Los_Angeles” displays as 12:00 PM for a “America/New_York” user (3-hour difference). The scheduler handles all conversion math automatically.

UTC-based scheduling

For global systems, storing and displaying events using UTC provides an additional layer of consistency and helps eliminate timezone-related errors.

This approach is particularly useful for enterprise applications serving distributed teams.

In your Startup.cs, ensure JSON serialization uses UTC:

Startup.cs

.AddJsonOptions(opt => opt.SerializerSettings.DateTimeZoneHandling = 
    DateTimeZoneHandling.Utc)
Enter fullscreen mode Exit fullscreen mode

This ensures server and client agree on time representation, preventing off-by-hour surprises.

Localization: Supporting multiple languages and cultures

The Scheduler integrates localization (globalization and language translation) to function globally. You can adapt the Scheduler to various languages and regions using the locale property.

CSHTML

<ejs-schedule id="schedule" width="100%" height="550px" locale="fr-CH">
    <e-schedule-eventsettings dataSource="@ViewBag.appointments"></e-schedule-eventsettings>
</ejs-schedule>
Enter fullscreen mode Exit fullscreen mode

Customize date format

By default, Scheduler follows "MM/dd/yyyy" format based on the locale. Customize using the dateFormat property:

CSHTML

<ejs-schedule id="schedule" width="100%" height="550px" dateFormat="yyyy/MM/dd">
    <e-schedule-eventsettings dataSource="@ViewBag.appointments"></e-schedule-eventsettings>
</ejs-schedule>
Enter fullscreen mode Exit fullscreen mode

Set time format

Control 12-hour or 24-hour format using timeFormat:

CSHTML

<ejs-schedule id="schedule" width="100%" height="550px" timeFormat="HH:mm">
    <e-schedule-eventsettings dataSource="@ViewBag.appointments"></e-schedule-eventsettings>
</ejs-schedule>
Enter fullscreen mode Exit fullscreen mode

Enable Right-to-Left (RTL) mode

For languages like Arabic or Hebrew, set enableRtl="true" to display the Scheduler layout from right to left:

CSHTML

<ejs-schedule id="schedule" width="100%" height="550px" enableRtl="true">
    <e-schedule-eventsettings dataSource="@ViewBag.appointments"></e-schedule-eventsettings>
</ejs-schedule>
Enter fullscreen mode Exit fullscreen mode

Localize static text

Translate UI text (buttons, labels, messages) using the L10n class:

JavaScript

var L10n = ej.base.L10n;
L10n.load({
    "hu": {
        "schedule": {
            "day": "Nap",
            "week": "Hét",
            "month": "Hónap",
            "today": "Ma",
            "noEvents": "Nincs esemény"
        }
    }
});
Enter fullscreen mode Exit fullscreen mode

Localization enables teams across regions to work seamlessly in their preferred languages and timezone representations.

Read the full blog post on the Syncfusion Website

Top comments (0)