разбиение даты и времени на составные части формы ASP.NET MVC - PullRequest
0 голосов
/ 24 мая 2010

Я неустанно искал в Интернете и ничего не нашел - что удивительно, потому что я думаю, что это такой распространенный сценарий!

По сути, на моей модели у меня есть поле DateTime, которое я хочу, чтобы пользователь заполнил через форму. Я использую Html помощник для отображения всех других частей формы (вместе с проверкой)

Итак, этот вопрос состоит из двух частей ...

Html Helper

Во-первых, есть ли способ использовать помощник Html для разделения поля DateTime, которое будет отображаться как три составные части даты: день, месяц, год (так как мне не важна временная часть). Это может быть представлено как текстовые поля, выпадающие списки или комбинация обоих.

Связывание моделей

И затем, когда форма публикуется, каков наилучший подход для привязки к модели? Я видел решение Скотта Хансельмана , но оно кажется немного раздутым для того, что мне нужно - я надеялся на более элегантное решение. Рекомендуется расширить DefaultModelBinder и установить его в качестве связующего по умолчанию (поскольку все даты будут обрабатываться таким образом) или написать класс, который реализует IModelBionder, и установить его в качестве связующего по умолчанию для типа DateTime?

Спасибо за всю помощь заранее :-) Я люблю MVC, но меня бесит, что что-то настолько тривиальное вызывает столько головных болей!

1 Ответ

1 голос
/ 25 мая 2010

думаю, что я нашел достойное решение для этого, поэтому я предоставлю ответ для любого, кто столкнется с этим в будущем!

Что касается Html-помощника, я почему-то совершенно упустил возможность создания расширенияметод!Поэтому, в конце концов, когда мне пришло в голову, я написал метод расширения, который в основном вызывает другие методы помощника Html, чтобы предоставить три поля (независимо от того, используете ли вы выпадающий ввод текста)

    public static string DateTime(this HtmlHelper helper, string name)
    {
        StringBuilder builder = new StringBuilder();
        string dayName = name + ".Day";
        string monthName = name + ".Month";
        string yearName = name + ".Year";

        builder.Append(helper.TextBox(dayName));
        builder.Append(helper.DropDownList(monthName, typeof (Months)));
        builder.Append(helper.TextBox(yearName));

        return builder.ToString();
    }

Что касается привязки после публикации формы, я просто создал класс, который реализовал IModelBinder и установил его по умолчанию для типа DateTime при запуске приложения.Затем это можно переопределить на уровне действия контроллера, если потребуется другой метод привязки.По сути, это была более простая версия связки Скотта, с которой я связался в своем вопросе.

В данный момент работает как шарм (если немного упрощенно), но я уверен, что этого будет достаточно для обоснования.для всех, кто озадачен этой проблемой!

...