ASP.NET MVC 3 Custom Type Conversion
Right now, I have a class defined as such:
public class Task
{
public Guid TaskId { get; set; }
public string TaskName { get; set; }
[DataType(DataType.Time)]
[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = @"{0:hh\:mm}")]
public TimeSpan? TimeRequired { ge开发者_开发百科t; set; }
}
I would like to allow the user to also enter "2h" or "15m" for 2 hours or 15 minutes respectively. Is there a way I can allow these types of custom inputs? I was thinking of just creating a text box and then doing a custom check against that incoming value and cast it correctly to a TimeSpan. I wasn't sure if there was some type of "CustomConverter" much like the "CustomValidator" attribute.
Please let me know if anything is unclear.
Thanks in advance!
I think I finally found it. According to Custom Model Binders you can just add a custom model binder in the Global.asax. Here is what I did. I added a class as such:
public class TimeSpanModelBinder : IModelBinder
{
public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
{
ValueProviderResult value = bindingContext.ValueProvider.GetValue(bindingContext.ModelName);
string attemptedValue = value.AttemptedValue;
// Custom parsing and return the TimeSpan? here.
}
}
and then I added this line to my Global.asax.cs in public void Application_Start()
ModelBinders.Binders.Add(typeof(TimeSpan?), new TimeSpanModelBinder());
Works like a charm!
精彩评论