21 NOVEMBER 2019
This example shows how to filter out specific sequences of characters from a user input string when binding to the model:
public class SpecialStringBinder : IModelBinder
{
public Task BindModelAsync(ModelBindingContext bindingContext)
{
if (bindingContext == null)
{
throw new ArgumentNullException(nameof(bindingContext))
}
var fieldName = bindingContext.FieldName
if (string.IsNullOrEmpty(fieldName))
{
throw new Exception("Field name not found")
}
// Try to fetch the value of the argument by name
var valueProviderResult = bindingContext.ValueProvider.GetValue(fieldName)
if (valueProviderResult == ValueProviderResult.None)
{
return Task.CompletedTask
}
bindingContext.ModelState.SetModelValue(fieldName, valueProviderResult)
var value = valueProviderResult.FirstValue
if (string.IsNullOrEmpty(value))
{
return Task.CompletedTask
}
string model = value.Replace("\r", string.Empty).Replace("\n", string.Empty)
bindingContext.Result = ModelBindingResult.Success(model)
return Task.CompletedTask
}
}
Add to property in model:
public class MyModel {
[ModelBinder(BinderType = typeof(SpecialStringBinder))]
[StringLength(150, ErrorMessage = "Max length 150 characters")]
public string SpecialString { get set }
}