@using Syncfusion.Blazor.Inputs
@code { [Parameter] public string Placeholder { get; set; } [Parameter] public string Mask { get; set; } = "[0-1][0-9]/[0-3][0-9]/[1-9][0-9][0-9][0-9]"; [Parameter] public string CssClass { get; set; } = "form-group-align"; [Parameter] public string ValidState { get; set; } [Parameter] public DateTime? DateValue { get; set; } [Parameter] public EventCallback DateValueChanged { get; set; } [Parameter] public EventCallback Blur { get; set; } [Parameter] public bool AllowNull { get; set; } [Parameter] public EventCallback OnValidate { get; set; } private string StringValue { get; set; } static class Converter { public static String DateTimeToString(DateTime dateTime) { return dateTime.ToString("MM/dd/yyyy"); } public static DateTime? StringToDateTime(string strDate) { if (!string.IsNullOrEmpty(strDate)) { if (strDate.Contains("/")) { //Removes any / characters from date string strDate = strDate.Replace("/", ""); } try { var result = DateTime.ParseExact(strDate, "MMddyyyy", System.Globalization.CultureInfo.CurrentCulture); if (strDate.Length < 5) { //Invalid date, may assume current year. Lets force it to a bad year. result = new DateTime(1, result.Month, result.Day); } return result; } catch (Exception ex) { #if DEBUG Console.WriteLine($"Unable to convert string ({strDate}) to datetime format.\r\n{ex.Message}"); #endif } } return null; } } public class ValidationEventArgs : System.EventArgs { public ValidationEventArgs() : base() { } public bool IsValid { get; set; } public string Message { get; set; } public DateTime? DateValue { get; set; } } private async Task DateValue_Changed(ChangedEventArgs args) { DateValue = args.Value; UpdateStringValue(DateValue); ValidationEventArgs result = new ValidationEventArgs { DateValue = this.DateValue }; if (OnValidate.HasDelegate) { await OnValidate.InvokeAsync(result); } await DateValueChanged.InvokeAsync(DateValue); if (Blur.HasDelegate) await Blur.InvokeAsync(new Microsoft.AspNetCore.Components.Web.FocusEventArgs { Type = args.GetType().Name }); } private async Task StringValue_Changed(MaskBlurEventArgs args) { DateValue = Converter.StringToDateTime(args.Value); await DateValueChanged.InvokeAsync(DateValue); if (Blur.HasDelegate) await Blur.InvokeAsync(new Microsoft.AspNetCore.Components.Web.FocusEventArgs { Type = args.GetType().Name }); } private void UpdateStringValue(DateTime? dateValue) { var nullable = dateValue as Nullable; if (nullable.HasValue) StringValue = Converter.DateTimeToString(nullable.Value); else StringValue = string.Empty; } protected override void OnParametersSet() { base.OnParametersSet(); UpdateStringValue(DateValue); } } Usage Example: @page="/MyPage" ... @Code{ private MaskedDateInput mdiServiceDate { get; set; } private async Task OnValidate_ServiceDate(MaskedDateInput.ValidationEventArgs args) { //Custom validation logic here args.IsValid = true; } }