Mit Verbesserungen in C # 6 können Sie jetzt einen sehr kompakten Modellordner schreiben, der alle Zeichenfolgeneingaben trimmt:
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();
}
}
Sie müssen diese Zeile irgendwo in Application_Start()
Ihre Global.asax.cs
Datei aufnehmen, um den Modellordner beim Binden von string
s verwenden zu können:
ModelBinders.Binders.Add(typeof(string), new TrimStringModelBinder());
Ich finde es besser, einen Modellordner wie diesen zu verwenden, als den Standardmodellordner zu überschreiben, da er dann immer dann verwendet wird, wenn Sie a binden string
, sei es direkt als Methodenargument oder als Eigenschaft für eine Modellklasse. Wenn Sie jedoch den Standardmodellordner überschreiben, wie andere Antworten hier vorschlagen, funktioniert dies nur , wenn Sie Eigenschaften für Modelle binden, nicht, wenn Sie string
ein Argument für eine Aktionsmethode haben
Bearbeiten: Ein Kommentator fragte nach dem Umgang mit der Situation, in der ein Feld nicht validiert werden sollte. Meine ursprüngliche Antwort wurde reduziert, um nur die Frage zu behandeln, die das OP gestellt hatte. Für Interessierte können Sie sich jedoch mit der Validierung befassen, indem Sie den folgenden erweiterten Modellordner verwenden:
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();
}
}