Вдосконалюючи C # 6, тепер ви можете написати дуже компактну палітурку моделі, яка буде обрізати всі рядкові входи:
public class TrimStringModelBinder : IModelBinder
{
public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
{
var value = bindingContext.ValueProvider.GetValue(bindingContext.ModelName);
var attemptedValue = value?.AttemptedValue;
return string.IsNullOrWhiteSpace(attemptedValue) ? attemptedValue : attemptedValue.Trim();
}
}
Вам потрібно включити цей рядок десь у Application_Start()
своєму Global.asax.cs
файлі, щоб використовувати палітурку моделі при прив'язці string
s:
ModelBinders.Binders.Add(typeof(string), new TrimStringModelBinder());
Я вважаю, що краще використовувати в'яжучу модель на зразок цього, а не переосмислювати палітурку моделі за замовчуванням, тому що вона буде використовуватися щоразу, коли ви прив'язуєте a string
, чи це безпосередньо як аргумент методу, або як властивість класу моделі. Однак, якщо ви заміните палітурку моделі за замовчуванням, як підказують інші відповіді, це працюватиме лише тоді, коли властивості прив'язки на моделях, а не тоді, коли у вас є string
аргумент методу дії
Редагувати: коментатор запитав про те, щоб розібратися з ситуацією, коли поле не слід перевіряти. Моя оригінальна відповідь зводилася лише до питання, яке поставив ОП, але для тих, хто цікавиться, ви можете розібратися з валідацією, скориставшись наступним розширеним в'яжучим зразком:
public class TrimStringModelBinder : IModelBinder
{
public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
{
var shouldPerformRequestValidation = controllerContext.Controller.ValidateRequest && bindingContext.ModelMetadata.RequestValidationEnabled;
var unvalidatedValueProvider = bindingContext.ValueProvider as IUnvalidatedValueProvider;
var value = unvalidatedValueProvider == null ?
bindingContext.ValueProvider.GetValue(bindingContext.ModelName) :
unvalidatedValueProvider.GetValue(bindingContext.ModelName, !shouldPerformRequestValidation);
var attemptedValue = value?.AttemptedValue;
return string.IsNullOrWhiteSpace(attemptedValue) ? attemptedValue : attemptedValue.Trim();
}
}