- '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.