net mvc form for asp c# .net asp.net asp.net-mvc html-helper

c# - mvc - return view asp.net core



¿Es posible crear un ayudante HTML de tipo ASP.NET MVC personalizado? (3)

Me preguntaba si es posible crear un ayudante HTML fuertemente tipado en ASP.NET MVC 2. Crear un ayudante regular (leer no fuertemente tipado) es sencillo, pero tengo dificultades para crear versiones fuertemente tipadas. Por ejemplo, me gustaría crear un ayudante de html DatePickerFor ...

Cualquier orientación o fragmento sería muy apreciado, ¡Gracias de antemano! JP


Acabo de probar lo siguiente para crear un ayudante CKEditor fuertemente tipado y parece estar funcionando perfectamente. Esto supone que ya ha incluido jquery y los scripts de ckeditor necesarios en su proyecto. Puede ser bueno tener en cuenta también la configuración de ckeditor, pero esto satisfizo mis necesidades actuales.

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); }


Ok, lo descubrí (y fue bastante sencillo ...). Publicar una de mis sobrecargas en caso de que alguien más se encuentre con esta pregunta.

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); }


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); }

Usé ModelMetadata, esto también funcionará si creas una plantilla datetime para el selector de fechas.