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 appointmentsfor time-bound activities -
All-day eventsfor holidays, conferences, or milestones -
Recurring eventsfor meetings that occur on a predictable schedule -
Multi-day eventsthat 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"
};
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" } }
};
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);
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();
}
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
saveEventmethod.
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);
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>
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>
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)
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>
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>
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>
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>
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"
}
}
});
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)