- 'mailto:// email@email.com ' or
- href=' http://www.wildesoft.net '
So what I need to remember is to either a) trim before I send to the database or b) trim after I retrieve from the database. I for one prefer option one, better to keep the database correct rather than fixing output in the UI. But is there a way that we can do this for every html control that is posted? With asp.net MVC we can override the default model binder which performs a trim before the value gets to the action method on a controller.
All you need to do is to add the following class to your mvc project:-
public class TrimModelBinder : DefaultModelBinder { protected override void SetProperty( ControllerContext controllerContext, ModelBindingContext bindingContext, PropertyDescriptor propertyDescriptor, object value) { if (propertyDescriptor.PropertyType == typeof(string)) { var val = (string)value; if (!string.IsNullOrEmpty(val)) val = stringValue.Trim(); value = val; } base.SetProperty(controllerContext, bindingContext, propertyDescriptor, value); } }Then in your application start up method:-
protected void Application_Start() { InitContainer(); ... ModelBinders.Binders.DefaultBinder = new TrimModelBinder(); }Now when a user keys in a leading or trailing space into any input control then the TrimModel binder kicks in and automatically removes it for you.
The only instance where this may be a problem is when a user has a leading or trailing space on their password.