Пользовательское расширение MVC HTML для свойства DateTime

#asp.net-mvc #extension-methods #html-helper

#asp.net-mvc #расширение-методы #html-помощник

Вопрос:

Возможно ли создать пользовательский HTML-помощник для asp.net mvc, который принимал бы DateTime как свойство TProperty, создавал 3 текстовых поля для дня, месяца и года и позволял мне возвращать полную дату и время при отправке формы?

Другими словами, я хочу что-то, что написано так в Razor :

 @Html.TripleTextboxFor(userModel => userModel.Birthdate)
 

Это выводит что-то вроде :

 <input type="text" name="BirthdateDay" />
<input type="text" name="BirthdateMonth" />
<input type="text" name="BirthdateYear" />
 

И, наконец, возможно ли создать такое расширение без дополнительной пользовательской привязки модели для получения опубликованной даты и времени?

Вот что я использовал до сих пор. Отображать значение нормально, но у меня есть дополнительная работа по возврату даты и времени проверка.

 public static MvcHtmlString TripleBirthDateTextBoxes<TModel>(this HtmlHelper<TModel> htmlHelper,Expression<Func<TModel, DateTime>> expression)
{
    StringBuilder output = new StringBuilder();
    var metaData = ModelMetadata.FromLambdaExpression(expression, htmlHelper.ViewData);

    DateTime dt = (DateTime)metaData.Model;

    output.Append(htmlHelper.TextBoxFor(m => dt.Day));
    output.Append(htmlHelper.TextBoxFor(m => dt.Month));
    output.Append(htmlHelper.TextBoxFor(m => dt.Year));

    return new MvcHtmlString(output.ToString());
}
 

Спасибо!

Комментарии:

1. Не невозможно, но довольно сложно. Проверьте блог Скотта

2. @tweray прав. Привязки моделей — это способ разделить ваши DateTime . Единственный недостаток, который я вижу, заключается в том, что HtmlHelper он не является автономным, т. Е. У вас нет всего кода, необходимого для того, чтобы заставить его работать внутри одного и того же метода.