ASP.NET MVC 3 Преобразование пользовательских типов - PullRequest
10 голосов
/ 28 июля 2011

Прямо сейчас у меня есть класс, определенный следующим образом:

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 { get; set; }
}

Я бы хотел, чтобы пользователь также мог вводить "2h" или "15m" в течение 2 часов или 15 минут соответственно.Есть ли способ, которым я могу разрешить эти типы пользовательских вводов?Я думал о том, чтобы просто создать текстовое поле, а затем выполнить пользовательскую проверку этого входящего значения и правильно привести его к TimeSpan.Я не был уверен, был ли какой-то тип CustomConverter, очень похожий на атрибут CustomValidator.

Пожалуйста, дайте мне знать, если что-то неясно.

Заранее спасибо!

1 Ответ

15 голосов
/ 28 июля 2011

Кажется, я наконец-то нашел это. В соответствии с пользовательскими связывателями моделей вы можете просто добавить пользовательские связыватели моделей в Global.asax Вот что я сделал. Я добавил класс как таковой:

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

и затем я добавил эту строку в мой Global.asax.cs в public void Application_Start()

ModelBinders.Binders.Add(typeof(TimeSpan?), new TimeSpanModelBinder());

Работает как шарм!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...