2010-01-23 12 views
16

Zastanawiam się, czy jest możliwe utworzenie niestandardowego, silnie wpisanego HTML Helper w ASP.NET MVC 2? Tworzenie zwykłego pomocnika (czytaj bez silnego pisania) jest proste, ale mam problemy z tworzeniem mocno napisanych wersji. Na przykład chciałbym stworzyć pomocnika html dla DatePickerFor ...Czy jest możliwe utworzenie niestandardowego programu ASP.NET MVC o silnym typie HTML Helper?

Wszelkie wskazówki lub fragmenty byłyby bardzo mile widziane, Z góry dziękuję! JP

Odpowiedz

14

Ok, wymyśliłem to (i to było całkiem proste ...). Publikowanie jednego z moich przeciążeń na wypadek, gdyby ktoś inny wpadł na to pytanie.

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

@JP Jak uzyskać wartość? na przykład html.DatePicker (x => x.Date), jak uzyskać wartość x.Date – Omu

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

użyłem ModelMetadata ten będzie również działać, jeśli utworzyć szablon datetime dla datepicker.

+0

Czy to konto 'html.DatePickerFor (m => m.User.Birthday)'? (Wiele poziomów dereferencji?) Wygląda na to, że członek '.PropertyName' właśnie zwróciłby ostatnią nazwę i nie powinien używać wszystkich poziomów? –

4

Właśnie wypróbowałem następujące elementy, aby utworzyć pomocnika CKEditor o silnym typie i wygląda na to, że działa bezbłędnie. Zakłada się, że jQuery i niezbędne skrypty cKeditora zostały już uwzględnione w projekcie. Przydałoby się również ustawić konfigurację ckeditor, ale to spełniło moje obecne potrzeby.

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); 
    } 
Powiązane problemy