#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
он не является автономным, т. Е. У вас нет всего кода, необходимого для того, чтобы заставить его работать внутри одного и того же метода.