Implementing Syncfusion ASP.NET MVC Scheduler
The Syncfusion ASP.NET MVC Scheduler is a comprehensive calendar and event management component that displays appointments in various views (Day, Week, Month, Year, Agenda, Timeline). It supports drag-and-drop, recurring events, multiple resources, timezone handling, and extensive customization options for building scheduling applications, appointment booking systems, resource management tools, and timeline-based interfaces.
When to Use This Skill
Use this skill when users want to:
- Create scheduling or calendar interfaces in ASP.NET MVC applications
- Implement appointment booking or event management systems
- Build resource scheduling with multiple calendars
- Display time-based data in day, week, month, or timeline views
- Handle recurring events with complex recurrence patterns
- Enable drag-and-drop appointment management
- Integrate with remote data services or Google Calendar
- Customize event rendering, templates, or styling
- Implement timezone-aware scheduling across regions
- Export calendar data to Excel, PDF, or ICS formats
Component Overview
The Scheduler component provides:
- Multiple Views: Day, Week, Work Week, Month, Year, Agenda, Month Agenda, Timeline variants
- Appointment Management: Create, read, update, delete with inline editing, drag-drop, resize
- Recurring Events: Daily, weekly, monthly, yearly patterns with exceptions
- Data Binding: Local arrays, remote services, OData, custom adaptors, Google Calendar
- Resource Scheduling: Single/multi-level grouping, vertical/timeline layouts
- Customization: Event templates, cell templates, header customization, styling
- Advanced Features: Timezone support, localization, virtual scrolling, state persistence
- Interactions: Context menu, quick info popup, keyboard navigation, touch support
- Export: Excel, PDF, ICS (iCalendar) formats
Documentation and Navigation Guide
Getting Started
📄 Read: references/getting-started.md
- Prerequisites and system requirements
- Installing NuGet package (Syncfusion.EJ2.MVC5)
- Adding Scheduler to ASP.NET MVC project
- CSS and script references (CDN, NPM, CRG)
- Basic initialization with event data
- Setting initial date and view
- Populating appointments from controller
Appointments and Event Management
📄 Read: references/appointments.md
- Normal, spanned, and all-day events
- Creating appointments programmatically
- Recurring events and recurrence rules (FREQ, INTERVAL, COUNT, UNTIL, BYDAY, BYMONTHDAY)
- Daily, weekly, monthly, yearly recurrence patterns
- Adding exceptions to recurring series
- Editing single occurrences vs entire series
- Event fields (Id, Subject, StartTime, EndTime, IsAllDay, RecurrenceRule, etc.)
- Binding different field names
- Adding custom fields to appointments
- Appointment selection and deletion
📄 Read: references/appointment-interactions.md
- Drag and drop appointments between time slots
- Multi-appointment drag (Ctrl+select multiple events)
- Resizing appointments (extending/shrinking duration)
- Controlling scroll speed during drag/resize
- Setting drag and resize intervals
- Auto-navigation on drag to edges
- Dragging from external sources (TreeView, ListView)
- Opening editor on drag stop
- Preventing overlaps with allowOverlap property
- Blocking specific dates/times (IsBlock field)
- Read-only appointments (IsReadonly field)
- Inline appointment editing
📄 Read: references/appointment-customization.md
- Event templates for custom rendering
- Using EventRendered event for styling
- CSS class customization (CssClass property)
- Setting minimum appointment height
- Tooltip configuration (enableTooltip, tooltipTemplate)
- Differentiating past events
- Sorting overlapping events (sortComparer)
- Appointments occupying full cell height (enableMaxHeight)
- Custom appointment colors and backgrounds
- Quick Info popup customization
Views and Navigation
📄 Read: references/views.md
- Available views: Day, Week, WorkWeek, Month, Year, Agenda, MonthAgenda
- Setting active view (currentView property)
- Configuring specific views to display
- View-specific options (dateFormat, readonly, showWeekend, workDays)
- Day view with custom intervals (display 3 days, 5 days, etc.)
- Week and Work Week customization (firstDayOfWeek, workDays)
- Month view with "+more" indicator
- Year view (Horizontal and Vertical orientations)
- Agenda view with virtual scrolling (agendaDaysCount, hideEmptyAgendaDays)
- Month-Agenda view
- Extending view intervals with displayName
- MaxEventStack appointment limit per cell
📄 Read: references/timeline-views.md
- Timeline Day, Week, Work Week views
- Timeline Month and Year views
- Horizontal time axis with appointments
- Resource grouping in timeline mode
- Header rows configuration (year, month, week, date, hour labels)
- Auto row height for timeline views
- Timeline-specific cell and event rendering
- Customizing timeline intervals and slots
Data Binding
📄 Read: references/data-binding.md
- Binding local JSON data arrays
- Remote data services with DataManager
- Using ODataV4Adaptor for OData services
- Filter events with includeFiltersInQuery
- Creating custom adaptors
- Loading data via AJAX post
- Passing additional parameters to server (Query.addParams)
- Handling server failures (ActionFailure event)
- CRUD operations with UrlAdaptor
- Server-side controller implementation (InsertOnSubmit, DeleteOnSubmit)
- Google Calendar API integration
- Mapping event fields in DataBinding event
Resources and Grouping
📄 Read: references/resources.md
- Resource fields (Field, Title, Name, DataSource, IdField, TextField, ColorField)
- AllowMultiple for multi-resource selection
- Local and remote resource data binding
- Scheduler with multiple resources (no visual grouping)
- Vertical resource view (calendar views)
- Timeline resource view
- Single-level resource grouping
- Multi-level hierarchical grouping (GroupIDField)
- One-to-one grouping (byGroupID: false)
- Grouping by date (byDate: true)
- Resource-specific work hours (StartHourField, EndHourField, WorkDaysField)
- Customizing parent resource cells
Cell and UI Customization
📄 Read: references/cell-customization.md
- Work cell templates (cellTemplate)
- Resource header templates (resourceHeaderTemplate)
- RenderCell event for conditional cell styling
- Cell click and double-click handling
- Restricting cell availability with isSlotAvailable
- Custom cell content and rendering
- Preventing event creation on specific cells
📄 Read: references/scheduler-styling.md
- Theme customization (Fluent, Material, Bootstrap, etc.)
- CSS class override techniques
- Event color customization
- Header bar styling
- Cell and time slot styling
- Resource color mapping (ColorField)
- Custom CSS examples for events and cells
- CssClass property for appointments
CRUD Operations
📄 Read: references/crud-actions.md
- Add, edit, delete events through UI
- Editor window configuration
- Custom editor templates (editorTemplate)
- Quick info popup customization
- Preventing default actions (ActionBegin event)
- Server-side CRUD with UrlAdaptor
- Validation rules for event fields
- Read-only mode (readonly property)
- Editor field settings (default, name, title, validation)
Context Menu
📄 Read: references/context-menu.md
- Enabling context menu on events and cells
- Default menu items (Add, Edit, Delete, Today, Save, Cancel, Close)
- Adding custom menu items
- Menu item selection handling (menuOpen, menuItemSelect events)
- Context menu templates
- Conditional menu display
Editor Customization
📄 Read: references/editor-template.md
- Creating custom editor popup
- Adding custom fields to editor
- Editor template setup with HTML
- Populating editor with appointment data
- Saving custom field data
- Multi-field editor forms
- Validation in custom editors
- Dependent Fields
- DateTime Picker
- Dropdown Fields
- Custom Styling
TimeScale Configuration
📄 Read: references/timescale.md
- TimeScale enable/disable (shows/hides time slots)
- Setting time slot duration (interval property in minutes)
- SlotCount for subdividing intervals
- Major slot template (majorSlotTemplate)
- Minor slot template (minorSlotTemplate)
- Hiding timescale grid lines
- Current time indicator (showTimeIndicator)
- Custom time label formats
Timezone Handling
📄 Read: references/timezone.md
- Scheduler-level timezone (timezone property)
- Event-specific timezones (StartTimezone, EndTimezone fields)
- IANA timezone names (America/New_York, Europe/London, etc.)
- Timezone conversion for display
- Handling appointments across multiple timezones
- UTC storage and local display
- Timezone offset calculations
Localization
📄 Read: references/localization.md
- Internationalization setup (locale property)
- Culture-specific date/time formats
- Translating Scheduler text (load CLDR data)
- RTL (right-to-left) support (enableRtl)
- Number and currency format customization
- Week number display (showWeekNumber)
- First day of week configuration
Header Customization
📄 Read: references/header-customization.md
- Header bar configuration
- Custom toolbar items
- Date range text customization (dateRangeTemplate)
- Hiding header bar elements
- Header rows for timeline views (year, month, week, date, hour)
- Custom navigation buttons
- Header item templates
- Date header templates (dateHeaderTemplate) with template scripts, formatted date text, and dynamic content like weather icons
- Combining DateHeaderTemplate with RenderCell for Month view decorations
Print and Export
📄 Read: references/print-and-export.md
- Export to Excel (exportToExcel method)
- Export to PDF (exportToPdf method) with page settings
- Export to ICS/iCalendar format (exportToICalendar method)
- Import iCalendar files (importICalendar) via Uploader
- Print the Scheduler with default options (print method)
- Custom export fields and field mapping
- Export selected events only
- Export options (fileName, exportType, customData)
- Excel custom cell formatting
- PDF orientation and page size
Advanced Features
📄 Read: references/advanced-features.md
- State persistence (enablePersistence) across page reloads
- Virtual scrolling for Agenda and Timeline views (allowVirtualScrolling)
- Row auto height (rowAutoHeight) for Timeline views with adaptive resource rows
- Working days configuration (workDays property)
- Start and end hour (startHour, endHour)
- Scheduler dimensions (width, height)
- Clipboard operations (cut, copy, paste events)
- Recurrence editor component (standalone)
- Calendar modes (Gregorian, Islamic calendar)
- Adaptive UI rendering with EnableAdaptiveUI for mobile-friendly layouts
Security Considerations
When implementing Syncfusion Scheduler:
- ✅ Always use [Authorize] and [ValidateAntiForgeryToken]
- ✅ Validate and sanitize all user inputs
- ✅ Encode all outputs to prevent XSS
- ✅ Filter data by authenticated user (multi-tenant isolation)
- ✅ Use parameterized queries (Entity Framework helps)
- ✅ Enable HTTPS and set secure cookie flags
- ✅ Implement audit logging for sensitive operations
- ✅ Follow principle of least privilege for resources
Quick Start Example
Basic Scheduler with Appointments
// Controller: HomeController.cs
public class HomeController : Controller
{
public ActionResult Index()
{
return View(GetScheduleData());
}
public List<AppointmentData> GetScheduleData()
{
List<AppointmentData> appData = new List<AppointmentData>();
appData.Add(new AppointmentData
{
Id = 1,
Subject = "Project Meeting",
StartTime = new DateTime(2026, 4, 10, 9, 30, 0),
EndTime = new DateTime(2026, 4, 10, 11, 0, 0),
Location = "Conference Room A"
});
return appData;
}
}
public class AppointmentData
{
public int Id { get; set; }
public string Subject { get; set; }
public DateTime StartTime { get; set; }
public DateTime EndTime { get; set; }
public string Location { get; set; }
}
@* View: Index.cshtml *@
@model List<AppointmentData>
@Html.EJS().Schedule("scheduler")
.Width("100%")
.Height("550px")
.SelectedDate(new DateTime(2026, 4, 10))
.EventSettings(e => e.DataSource(Model))
.Render()
Recurring Event Example
// Create a weekly recurring event (every Monday for 10 occurrences)
appData.Add(new AppointmentData
{
Id = 3,
Subject = "Weekly Team Standup",
StartTime = new DateTime(2026, 4, 13, 10, 0, 0),
EndTime = new DateTime(2026, 4, 13, 10, 30, 0),
RecurrenceRule = "FREQ=WEEKLY;BYDAY=MO;COUNT=10"
});
Common Patterns
1. Data Binding with Remote Service
@Html.EJS().Schedule("scheduler")
.Width("100%")
.Height("550px")
.EventSettings(e => e
.DataSource(d => d
.Url("url")
.CrudUrl("url")
.Adaptor("UrlAdaptor")
)
)
.Render()
2. Resource Grouping (Timeline View)
// Controller
public ActionResult Index()
{
ViewBag.Resources = GetResourceData();
return View(GetScheduleData());
}
public List<ResourceData> GetResourceData()
{
return new List<ResourceData>
{
new ResourceData { Id = 1, Text = "Room A", Color = "#cb6bb2" },
new ResourceData { Id = 2, Text = "Room B", Color = "#56ca85" }
};
}
@{
string[] group = new string[] { "Rooms" };
}
@Html.EJS().Schedule("scheduler")
.Width("100%")
.Height("550px")
.CurrentView(Syncfusion.EJ2.Schedule.View.TimelineWeek)
.Group(g => g.Resources(group))
.Resources(res =>
{
res.DataSource((IEnumerable<ResourceData>)ViewBag.Resources)
.Field("RoomId")
.Title("Room")
.Name("Rooms")
.TextField("Text")
.IdField("Id")
.ColorField("Color")
.Add();
})
.EventSettings(e => e.DataSource(Model))
.Render()
3. Custom Event Template
<script id="eventTemplate" type="text/x-template">
<div class="template-wrap">
<div class="subject">@Html.Encode("${Subject}")</div>
</div>
</script>
@Html.EJS().Schedule("scheduler")
.EventSettings(e => e
.DataSource(Model)
.Template("#eventTemplate")
)
.Render()
4. Handling CRUD Events
@Html.EJS().Schedule("scheduler")
.EventSettings(e => e.DataSource(Model))
.ActionBegin("onActionBegin")
.ActionComplete("onActionComplete")
.Render()
<script>
function onActionBegin(args) {
// args.requestType: 'eventCreate', 'eventChange', 'eventRemove'
if (args.requestType === 'eventCreate') {
console.log('Creating appointment:', args.data);
// Validate or modify data before save
}
}
function onActionComplete(args) {
if (args.requestType === 'eventCreated') {
console.log('Appointment created successfully');
}
}
</script>
Key Properties
| Property |
Type |
Description |
Width |
string |
Scheduler width (e.g., "100%", "800px") |
Height |
string |
Scheduler height (e.g., "550px") |
SelectedDate |
DateTime |
Initially displayed date |
CurrentView |
View |
Active view (Day, Week, Month, etc.) |
Views |
List |
Available views in toolbar |
EventSettings |
EventSettings |
Appointment data binding and configuration |
Group |
Group |
Resource grouping options |
Resources |
List |
Resource definitions |
TimeScale |
TimeScale |
Time slot configuration |
WorkDays |
int[] |
Working days (0=Sunday, 6=Saturday) |
StartHour |
string |
Start hour (e.g., "08:00") |
EndHour |
string |
End hour (e.g., "18:00") |
Timezone |
string |
Scheduler timezone (IANA format) |
Readonly |
bool |
Disable editing (default: false) |
ShowTimeIndicator |
bool |
Show current time line (default: true) |
AllowDragAndDrop |
bool |
Enable drag-drop (default: true) |
AllowResizing |
bool |
Enable appointment resize (default: true) |
AllowMultiDrag |
bool |
Enable multi-select drag (default: false) |
AllowInline |
bool |
Enable inline editing (default: false) |
EnablePersistence |
bool |
Save state across reloads (default: false) |
Common Use Cases
Appointment Booking System
- Use Month view for date selection, Day view for time slots
- Implement custom event template showing patient/client details
- Use
isSlotAvailable method to check availability
- Block lunch breaks and off-hours with IsBlock
- Send confirmation emails in ActionComplete event
Resource Scheduling (Meeting Rooms, Equipment)
- Configure resources with room/equipment details
- Use Timeline Week/Month view for resource overview
- Enable resource grouping (byDate: false)
- Implement color coding by resource type
- Set resource-specific work hours (StartHourField, EndHourField)
Project Timeline Management
- Use Timeline views with custom intervals (display weeks/months)
- Create milestone events as all-day appointments
- Implement custom event template showing task progress
- Group by project phases using hierarchical resources
- Export to Excel for stakeholder reports
Employee Shift Scheduling
- Use Work Week view with custom workDays
- Configure multiple resources (employees) with timeline grouping
- Implement recurring shift patterns (weekly recurrence)
- Use custom cell templates to show shift details
- Handle shift swaps with drag-drop between resources
1---2name: syncfusion-aspnetmvc-scheduler3description: Guide for implementing Syncfusion ASP.NET MVC Scheduler component. Use this skill whenever users need to create scheduling interfaces, calendar views, event management systems, appointment booking, resource scheduling, timeline views, recurring events, drag-drop calendars, or any time-based data visualization. Covers setup, data binding, views configuration, CRUD operations, resources, customization, and integration with remote services.4---56# Implementing Syncfusion ASP.NET MVC Scheduler78The Syncfusion ASP.NET MVC Scheduler is a comprehensive calendar and event management component that displays appointments in various views (Day, Week, Month, Year, Agenda, Timeline). It supports drag-and-drop, recurring events, multiple resources, timezone handling, and extensive customization options for building scheduling applications, appointment booking systems, resource management tools, and timeline-based interfaces.910## When to Use This Skill1112Use this skill when users want to:13- Create scheduling or calendar interfaces in ASP.NET MVC applications14- Implement appointment booking or event management systems15- Build resource scheduling with multiple calendars16- Display time-based data in day, week, month, or timeline views17- Handle recurring events with complex recurrence patterns18- Enable drag-and-drop appointment management19- Integrate with remote data services or Google Calendar20- Customize event rendering, templates, or styling21- Implement timezone-aware scheduling across regions22- Export calendar data to Excel, PDF, or ICS formats2324## Component Overview2526The Scheduler component provides:27- **Multiple Views**: Day, Week, Work Week, Month, Year, Agenda, Month Agenda, Timeline variants28- **Appointment Management**: Create, read, update, delete with inline editing, drag-drop, resize29- **Recurring Events**: Daily, weekly, monthly, yearly patterns with exceptions30- **Data Binding**: Local arrays, remote services, OData, custom adaptors, Google Calendar31- **Resource Scheduling**: Single/multi-level grouping, vertical/timeline layouts32- **Customization**: Event templates, cell templates, header customization, styling33- **Advanced Features**: Timezone support, localization, virtual scrolling, state persistence34- **Interactions**: Context menu, quick info popup, keyboard navigation, touch support35- **Export**: Excel, PDF, ICS (iCalendar) formats3637---3839## Documentation and Navigation Guide4041### Getting Started42📄 **Read:** [references/getting-started.md](references/getting-started.md)43- Prerequisites and system requirements44- Installing NuGet package (Syncfusion.EJ2.MVC5)45- Adding Scheduler to ASP.NET MVC project46- CSS and script references (CDN, NPM, CRG)47- Basic initialization with event data48- Setting initial date and view49- Populating appointments from controller5051### Appointments and Event Management52📄 **Read:** [references/appointments.md](references/appointments.md)53- Normal, spanned, and all-day events54- Creating appointments programmatically55- Recurring events and recurrence rules (FREQ, INTERVAL, COUNT, UNTIL, BYDAY, BYMONTHDAY)56- Daily, weekly, monthly, yearly recurrence patterns57- Adding exceptions to recurring series58- Editing single occurrences vs entire series59- Event fields (Id, Subject, StartTime, EndTime, IsAllDay, RecurrenceRule, etc.)60- Binding different field names61- Adding custom fields to appointments62- Appointment selection and deletion6364📄 **Read:** [references/appointment-interactions.md](references/appointment-interactions.md)65- Drag and drop appointments between time slots66- Multi-appointment drag (Ctrl+select multiple events)67- Resizing appointments (extending/shrinking duration)68- Controlling scroll speed during drag/resize69- Setting drag and resize intervals70- Auto-navigation on drag to edges71- Dragging from external sources (TreeView, ListView)72- Opening editor on drag stop73- Preventing overlaps with allowOverlap property74- Blocking specific dates/times (IsBlock field)75- Read-only appointments (IsReadonly field)76- Inline appointment editing7778📄 **Read:** [references/appointment-customization.md](references/appointment-customization.md)79- Event templates for custom rendering80- Using EventRendered event for styling81- CSS class customization (CssClass property)82- Setting minimum appointment height83- Tooltip configuration (enableTooltip, tooltipTemplate)84- Differentiating past events85- Sorting overlapping events (sortComparer)86- Appointments occupying full cell height (enableMaxHeight)87- Custom appointment colors and backgrounds88- Quick Info popup customization8990### Views and Navigation91📄 **Read:** [references/views.md](references/views.md)92- Available views: Day, Week, WorkWeek, Month, Year, Agenda, MonthAgenda93- Setting active view (currentView property)94- Configuring specific views to display95- View-specific options (dateFormat, readonly, showWeekend, workDays)96- Day view with custom intervals (display 3 days, 5 days, etc.)97- Week and Work Week customization (firstDayOfWeek, workDays)98- Month view with "+more" indicator99- Year view (Horizontal and Vertical orientations)100- Agenda view with virtual scrolling (agendaDaysCount, hideEmptyAgendaDays)101- Month-Agenda view102- Extending view intervals with displayName103- MaxEventStack appointment limit per cell104105📄 **Read:** [references/timeline-views.md](references/timeline-views.md)106- Timeline Day, Week, Work Week views107- Timeline Month and Year views108- Horizontal time axis with appointments109- Resource grouping in timeline mode110- Header rows configuration (year, month, week, date, hour labels)111- Auto row height for timeline views112- Timeline-specific cell and event rendering113- Customizing timeline intervals and slots114115### Data Binding116📄 **Read:** [references/data-binding.md](references/data-binding.md)117- Binding local JSON data arrays118- Remote data services with DataManager119- Using ODataV4Adaptor for OData services120- Filter events with includeFiltersInQuery121- Creating custom adaptors122- Loading data via AJAX post123- Passing additional parameters to server (Query.addParams)124- Handling server failures (ActionFailure event)125- CRUD operations with UrlAdaptor126- Server-side controller implementation (InsertOnSubmit, DeleteOnSubmit)127- Google Calendar API integration128- Mapping event fields in DataBinding event129130### Resources and Grouping131📄 **Read:** [references/resources.md](references/resources.md)132- Resource fields (Field, Title, Name, DataSource, IdField, TextField, ColorField)133- AllowMultiple for multi-resource selection134- Local and remote resource data binding135- Scheduler with multiple resources (no visual grouping)136- Vertical resource view (calendar views)137- Timeline resource view138- Single-level resource grouping139- Multi-level hierarchical grouping (GroupIDField)140- One-to-one grouping (byGroupID: false)141- Grouping by date (byDate: true)142- Resource-specific work hours (StartHourField, EndHourField, WorkDaysField)143- Customizing parent resource cells144145### Cell and UI Customization146📄 **Read:** [references/cell-customization.md](references/cell-customization.md)147- Work cell templates (cellTemplate)148- Resource header templates (resourceHeaderTemplate)149- RenderCell event for conditional cell styling150- Cell click and double-click handling151- Restricting cell availability with isSlotAvailable152- Custom cell content and rendering153- Preventing event creation on specific cells154155📄 **Read:** [references/scheduler-styling.md](references/scheduler-styling.md)156- Theme customization (Fluent, Material, Bootstrap, etc.)157- CSS class override techniques158- Event color customization159- Header bar styling160- Cell and time slot styling161- Resource color mapping (ColorField)162- Custom CSS examples for events and cells163- CssClass property for appointments164165### CRUD Operations166📄 **Read:** [references/crud-actions.md](references/crud-actions.md)167- Add, edit, delete events through UI168- Editor window configuration169- Custom editor templates (editorTemplate)170- Quick info popup customization171- Preventing default actions (ActionBegin event)172- Server-side CRUD with UrlAdaptor173- Validation rules for event fields174- Read-only mode (readonly property)175- Editor field settings (default, name, title, validation)176177### Context Menu178📄 **Read:** [references/context-menu.md](references/context-menu.md)179- Enabling context menu on events and cells180- Default menu items (Add, Edit, Delete, Today, Save, Cancel, Close)181- Adding custom menu items182- Menu item selection handling (menuOpen, menuItemSelect events)183- Context menu templates184- Conditional menu display185186### Editor Customization187📄 **Read:** [references/editor-template.md](references/editor-template.md)188- Creating custom editor popup189- Adding custom fields to editor190- Editor template setup with HTML191- Populating editor with appointment data192- Saving custom field data193- Multi-field editor forms194- Validation in custom editors195- Dependent Fields196- DateTime Picker197- Dropdown Fields198- Custom Styling199200### TimeScale Configuration201📄 **Read:** [references/timescale.md](references/timescale.md)202- TimeScale enable/disable (shows/hides time slots)203- Setting time slot duration (interval property in minutes)204- SlotCount for subdividing intervals205- Major slot template (majorSlotTemplate)206- Minor slot template (minorSlotTemplate)207- Hiding timescale grid lines208- Current time indicator (showTimeIndicator)209- Custom time label formats210211### Timezone Handling212📄 **Read:** [references/timezone.md](references/timezone.md)213- Scheduler-level timezone (timezone property)214- Event-specific timezones (StartTimezone, EndTimezone fields)215- IANA timezone names (America/New_York, Europe/London, etc.)216- Timezone conversion for display217- Handling appointments across multiple timezones218- UTC storage and local display219- Timezone offset calculations220221### Localization222📄 **Read:** [references/localization.md](references/localization.md)223- Internationalization setup (locale property)224- Culture-specific date/time formats225- Translating Scheduler text (load CLDR data)226- RTL (right-to-left) support (enableRtl)227- Number and currency format customization228- Week number display (showWeekNumber)229- First day of week configuration230231### Header Customization232📄 **Read:** [references/header-customization.md](references/header-customization.md)233- Header bar configuration234- Custom toolbar items235- Date range text customization (dateRangeTemplate)236- Hiding header bar elements237- Header rows for timeline views (year, month, week, date, hour)238- Custom navigation buttons239- Header item templates240- Date header templates (dateHeaderTemplate) with template scripts, formatted date text, and dynamic content like weather icons241- Combining DateHeaderTemplate with RenderCell for Month view decorations242243### Print and Export244📄 **Read:** [references/print-and-export.md](references/print-and-export.md)245- Export to Excel (exportToExcel method)246- Export to PDF (exportToPdf method) with page settings247- Export to ICS/iCalendar format (exportToICalendar method)248- Import iCalendar files (importICalendar) via Uploader249- Print the Scheduler with default options (print method)250- Custom export fields and field mapping251- Export selected events only252- Export options (fileName, exportType, customData)253- Excel custom cell formatting254- PDF orientation and page size255256### Advanced Features257📄 **Read:** [references/advanced-features.md](references/advanced-features.md)258- State persistence (enablePersistence) across page reloads259- Virtual scrolling for Agenda and Timeline views (allowVirtualScrolling)260- Row auto height (rowAutoHeight) for Timeline views with adaptive resource rows261- Working days configuration (workDays property)262- Start and end hour (startHour, endHour)263- Scheduler dimensions (width, height)264- Clipboard operations (cut, copy, paste events)265- Recurrence editor component (standalone)266- Calendar modes (Gregorian, Islamic calendar)267- Adaptive UI rendering with EnableAdaptiveUI for mobile-friendly layouts268269## Security Considerations270271When implementing Syncfusion Scheduler:272- ✅ Always use [Authorize] and [ValidateAntiForgeryToken]273- ✅ Validate and sanitize all user inputs274- ✅ Encode all outputs to prevent XSS275- ✅ Filter data by authenticated user (multi-tenant isolation)276- ✅ Use parameterized queries (Entity Framework helps)277- ✅ Enable HTTPS and set secure cookie flags278- ✅ Implement audit logging for sensitive operations279- ✅ Follow principle of least privilege for resources280281---282283## Quick Start Example284285### Basic Scheduler with Appointments286287```csharp288// Controller: HomeController.cs289public class HomeController : Controller290{291 public ActionResult Index()292 {293 return View(GetScheduleData());294 }295296 public List<AppointmentData> GetScheduleData()297 {298 List<AppointmentData> appData = new List<AppointmentData>();299 appData.Add(new AppointmentData300 {301 Id = 1,302 Subject = "Project Meeting",303 StartTime = new DateTime(2026, 4, 10, 9, 30, 0),304 EndTime = new DateTime(2026, 4, 10, 11, 0, 0),305 Location = "Conference Room A"306 });307 return appData;308 }309}310311public class AppointmentData312{313 public int Id { get; set; }314 public string Subject { get; set; }315 public DateTime StartTime { get; set; }316 public DateTime EndTime { get; set; }317 public string Location { get; set; }318}319```320321```cshtml322@* View: Index.cshtml *@323@model List<AppointmentData>324325@Html.EJS().Schedule("scheduler")326 .Width("100%")327 .Height("550px")328 .SelectedDate(new DateTime(2026, 4, 10))329 .EventSettings(e => e.DataSource(Model))330 .Render()331```332333### Recurring Event Example334335```csharp336// Create a weekly recurring event (every Monday for 10 occurrences)337appData.Add(new AppointmentData338{339 Id = 3,340 Subject = "Weekly Team Standup",341 StartTime = new DateTime(2026, 4, 13, 10, 0, 0),342 EndTime = new DateTime(2026, 4, 13, 10, 30, 0),343 RecurrenceRule = "FREQ=WEEKLY;BYDAY=MO;COUNT=10"344});345```346347---348349## Common Patterns350351### 1. Data Binding with Remote Service352353```cshtml354@Html.EJS().Schedule("scheduler")355 .Width("100%")356 .Height("550px")357 .EventSettings(e => e358 .DataSource(d => d359 .Url("url")360 .CrudUrl("url")361 .Adaptor("UrlAdaptor")362 )363 )364 .Render()365```366367### 2. Resource Grouping (Timeline View)368369```csharp370// Controller371public ActionResult Index()372{373 ViewBag.Resources = GetResourceData();374 return View(GetScheduleData());375}376377public List<ResourceData> GetResourceData()378{379 return new List<ResourceData>380 {381 new ResourceData { Id = 1, Text = "Room A", Color = "#cb6bb2" },382 new ResourceData { Id = 2, Text = "Room B", Color = "#56ca85" }383 };384}385```386387```cshtml388@{389 string[] group = new string[] { "Rooms" };390}391392@Html.EJS().Schedule("scheduler")393 .Width("100%")394 .Height("550px")395 .CurrentView(Syncfusion.EJ2.Schedule.View.TimelineWeek)396 .Group(g => g.Resources(group))397 .Resources(res =>398 {399 res.DataSource((IEnumerable<ResourceData>)ViewBag.Resources)400 .Field("RoomId")401 .Title("Room")402 .Name("Rooms")403 .TextField("Text")404 .IdField("Id")405 .ColorField("Color")406 .Add();407 })408 .EventSettings(e => e.DataSource(Model))409 .Render()410```411412### 3. Custom Event Template413414```cshtml415<script id="eventTemplate" type="text/x-template">416 <div class="template-wrap">417 <div class="subject">@Html.Encode("${Subject}")</div>418 </div>419</script>420421@Html.EJS().Schedule("scheduler")422 .EventSettings(e => e423 .DataSource(Model)424 .Template("#eventTemplate")425 )426 .Render()427```428429### 4. Handling CRUD Events430431```cshtml432@Html.EJS().Schedule("scheduler")433 .EventSettings(e => e.DataSource(Model))434 .ActionBegin("onActionBegin")435 .ActionComplete("onActionComplete")436 .Render()437438<script>439 function onActionBegin(args) {440 // args.requestType: 'eventCreate', 'eventChange', 'eventRemove'441 if (args.requestType === 'eventCreate') {442 console.log('Creating appointment:', args.data);443 // Validate or modify data before save444 }445 }446447 function onActionComplete(args) {448 if (args.requestType === 'eventCreated') {449 console.log('Appointment created successfully');450 }451 }452</script>453```454455## Key Properties456457| Property | Type | Description |458|----------|------|-------------|459| `Width` | string | Scheduler width (e.g., "100%", "800px") |460| `Height` | string | Scheduler height (e.g., "550px") |461| `SelectedDate` | DateTime | Initially displayed date |462| `CurrentView` | View | Active view (Day, Week, Month, etc.) |463| `Views` | List<ScheduleView> | Available views in toolbar |464| `EventSettings` | EventSettings | Appointment data binding and configuration |465| `Group` | Group | Resource grouping options |466| `Resources` | List<Resource> | Resource definitions |467| `TimeScale` | TimeScale | Time slot configuration |468| `WorkDays` | int[] | Working days (0=Sunday, 6=Saturday) |469| `StartHour` | string | Start hour (e.g., "08:00") |470| `EndHour` | string | End hour (e.g., "18:00") |471| `Timezone` | string | Scheduler timezone (IANA format) |472| `Readonly` | bool | Disable editing (default: false) |473| `ShowTimeIndicator` | bool | Show current time line (default: true) |474| `AllowDragAndDrop` | bool | Enable drag-drop (default: true) |475| `AllowResizing` | bool | Enable appointment resize (default: true) |476| `AllowMultiDrag` | bool | Enable multi-select drag (default: false) |477| `AllowInline` | bool | Enable inline editing (default: false) |478| `EnablePersistence` | bool | Save state across reloads (default: false) |479480---481482## Common Use Cases483484### Appointment Booking System485- Use Month view for date selection, Day view for time slots486- Implement custom event template showing patient/client details487- Use `isSlotAvailable` method to check availability488- Block lunch breaks and off-hours with IsBlock489- Send confirmation emails in ActionComplete event490491### Resource Scheduling (Meeting Rooms, Equipment)492- Configure resources with room/equipment details493- Use Timeline Week/Month view for resource overview494- Enable resource grouping (byDate: false)495- Implement color coding by resource type496- Set resource-specific work hours (StartHourField, EndHourField)497498### Project Timeline Management499- Use Timeline views with custom intervals (display weeks/months)500- Create milestone events as all-day appointments501- Implement custom event template showing task progress502- Group by project phases using hierarchical resources503- Export to Excel for stakeholder reports504505### Employee Shift Scheduling506- Use Work Week view with custom workDays507- Configure multiple resources (employees) with timeline grouping508- Implement recurring shift patterns (weekly recurrence)509- Use custom cell templates to show shift details510- Handle shift swaps with drag-drop between resources511512---