using System; using System.Threading.Tasks; using Microsoft.AspNetCore.Mvc.ModelBinding; using WalkingTec.Mvvm.Core; namespace WalkingTec.Mvvm.Mvc.Binders { /// /// DateRangeBinder /// DataRange model binding /// public class DateRangeBinder : IModelBinder { /// /// BindModelAsync /// /// /// public Task BindModelAsync(ModelBindingContext bindingContext) { if (bindingContext == null) { throw new ArgumentNullException(nameof(bindingContext)); } var modelName = bindingContext.ModelName; if (string.IsNullOrEmpty(modelName)) { bindingContext.Result = ModelBindingResult.Success(null); return Task.CompletedTask; } var valueProviderResult = bindingContext.ValueProvider.GetValue(modelName); if (valueProviderResult == ValueProviderResult.None) { modelName += "[Value]"; valueProviderResult = bindingContext.ValueProvider.GetValue(modelName); } if (valueProviderResult == ValueProviderResult.None) return Task.CompletedTask; bindingContext.ModelState.SetModelValue(modelName, valueProviderResult); var value = valueProviderResult.FirstValue; if (string.IsNullOrEmpty(value)) { return Task.CompletedTask; } if(DateRange.TryParse(value,out var dateRange)) bindingContext.Result = ModelBindingResult.Success(dateRange); return Task.CompletedTask; } } }