Возможно ли создать пользовательский ASP.NET MVC с жестко типизированным HTML-помощником?
Мне было интересно, можно ли создать пользовательский строго типизированный HTML-помощник в ASP.NET MVC 2? Создание регулярного (read not-strict-typed) помощника является простым, но мне трудно создавать строго типизированные версии. Например, я хотел бы создать помощник DatePickerFor html...
Любые рекомендации или фрагменты будут очень благодарны,
Заранее спасибо!
В JP
Ответы
Ответ 1
Хорошо, я понял это (и это было довольно просто). Публикация одной из моих перегрузок в случае, если кто-то еще столкнется с этим вопросом.
public static string DatePickerFor<TModel, TProperty>(this HtmlHelper<TModel> htmlHelper,Expression<Func<TModel, TProperty>> expression)
where TModel : class
{
var inputName = ExpressionHelper.GetExpressionText(expression);
return htmlHelper.DatePicker(inputName);
}
Ответ 2
Я просто попробовал следующее, чтобы создать строго типизированный помощник CKEditor и, похоже, работает безупречно. Это предполагает, что вы уже включили jquery и необходимые скрипты ckeditor в свой проект. Возможно, было бы неплохо посмотреть также на настройку конфигурации ckeditor, но это удовлетворило мои текущие потребности.
public static MvcHtmlString CkEditor(this HtmlHelper htmlHelper, string name, string value, object htmlAttributes)
{
var output = htmlHelper.TextArea(name, value, htmlAttributes).ToString();
output += string.Format("<script type=\"text/javascript\">$(document).ready(function(){{ $('#{0}').ckeditor(); }});</script>", name);
return MvcHtmlString.Create(output);
}
public static MvcHtmlString CkEditor(this HtmlHelper htmlHelper, string name, string value)
{
return htmlHelper.CkEditor(name, value, null);
}
public static MvcHtmlString CkEditorFor<TModel, TProperty>(this HtmlHelper<TModel> htmlHelper, Expression<Func<TModel, TProperty>> expression, object htmlAttributes) where TModel : class
{
ModelMetadata metadata = ModelMetadata.FromLambdaExpression(expression, htmlHelper.ViewData);
return htmlHelper.CkEditor(metadata.PropertyName, metadata.Model as string, htmlAttributes);
}
public static MvcHtmlString CkEditorFor<TModel, TProperty>(this HtmlHelper<TModel> htmlHelper, Expression<Func<TModel, TProperty>> expression) where TModel : class
{
return htmlHelper.CkEditorFor(expression, null);
}
Ответ 3
public static string DatePickerFor<TModel, TProperty>(this HtmlHelper<TModel> htmlHelper,Expression<Func<TModel, TProperty>> expression)
where TModel : class
{
ModelMetadata metadata = ModelMetadata.FromLambdaExpression(expression, htmlHelper.ViewData);
return htmlHelper.DatePicker(metadata.PropertyName);
}
Я использовал ModelMetadata, это также сработает, если вы создадите шаблон даты и времени для datepicker.