Я пытаюсь создать вспомогательное расширение html строго для средства выбора даты, используя jquery ui datepicker.Я создал расширение со строгой типизацией, которое работает, но сейчас я пытаюсь создать строго типизированное.
Вот что у меня есть:
public static MvcHtmlString DatePicker(this HtmlHelper html, string name, object date)
{
var inputTag = new TagBuilder("input");
inputTag.MergeAttribute("id", name);
inputTag.MergeAttribute("name", name);
inputTag.MergeAttribute("type", "text");
if (date != null)
{
string dateValue = String.Empty;
if ((date is DateTime? ||date is DateTime) && (DateTime)date != DateTime.MinValue)
{
dateValue = ((DateTime)date).ToShortDateString();
}
else if (date is string)
{
dateValue = (string)date;
}
inputTag.MergeAttribute("value", dateValue);
}
return MvcHtmlString.Create(inputTag.ToString());
}
Это работает исохранится значение.Вот что у меня есть для моего строго типизированного расширения.
public static MvcHtmlString DatePickerFor<TModel, TProperty>(this HtmlHelper<TModel> htmlHelper, Expression<Func<TModel, TProperty>> expression) where TModel : class
{
Func<TModel, TProperty> myFunc = expression.Compile();
var value = myFunc(???);
var inputName = ExpressionHelper.GetExpressionText(expression);
return htmlHelper.DatePicker(inputName, value);
}
Это работает, если я передаю значение NULL (значение = ноль), но при редактировании средство выбора даты не заполняется значением.
Как получить значение в моем методе расширения DatePickerFor из модели.(Я знаю, что могу просто передать значение другим параметром, но я бы предпочел этого не делать. Плюс это довольно интересно)
Спасибо, Кевин
- РЕДАКТИРОВАТЬ ------Что у меня есть в конечном итоге ---------- Примечание: это не было полностью протестировано, но, похоже, работает прямо сейчас.
public static MvcHtmlString DatePicker(this HtmlHelper html, string name, object date)
{
var inputTag = new TagBuilder("input");
inputTag.MergeAttribute("id", name);
inputTag.MergeAttribute("name", name);
inputTag.MergeAttribute("type", "text");
inputTag.AddCssClass("jqueryDatePicker");
if (date != null)
{
string dateValue = String.Empty;
if ((date is DateTime? ||date is DateTime) && (DateTime)date != DateTime.MinValue)
{
dateValue = ((DateTime)date).ToShortDateString();
}
else if (date is string)
{
dateValue = (string)date;
}
inputTag.MergeAttribute("value", dateValue);
}
return MvcHtmlString.Create(inputTag.ToString());
}
public static MvcHtmlString DatePickerFor<TModel, TProperty>(this HtmlHelper<TModel> htmlHelper, Expression<Func<TModel, TProperty>> expression) where TModel : class
{
Func<TModel, TProperty> methodCall = expression.Compile();
TProperty value = methodCall(htmlHelper.ViewData.Model);
var inputName = ExpressionHelper.GetExpressionText(expression);
return htmlHelper.DatePicker(inputName, value);
}
Это использует пользовательский интерфейс JQueryскрипт выбора даты.Что такое «jqueryDatePicker» и почему он добавлен как класс?Вместо того чтобы вызывать $ (# ...). Datepicker () для каждой страницы, я добавляю этот класс, и есть некоторый javascript, который найдет этот класс и вызовет .datepicker () для вас.