@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;
}
}