2010-01-23 72 views
16

我想知道是否有可能在ASP.NET MVC 2中創建一個自定義強類型的HTML幫助器?創建一個常規(讀取不強類型)助手很簡單,但我很難創建強類型的版本。例如,我想創建一個DatePickerFor html幫手...是否可以創建一個自定義的ASP.NET MVC強類型的HTML Helper?

任何指導或片段將不勝感激, 預先感謝您! JP

回答

14

好吧,我想通了(這是非常簡單的...)。張貼我的重載之一,以防其他人遇到此問題。

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你是如何得到價值的?例如html.DatePicker(x => x.Date),你如何得到x.Date值 – Omu 2011-01-10 08:29:46

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

我用ModelMetadata如果創建日期選擇器日期時間模板,這也將工作。

+0

這是否說明'html.DatePickerFor(m => m.User.Birthday)'? (多級別的解引用?)它看起來像'.PropertyName'成員只會返回最近的名稱,不應該使用所有的級別? – 2012-12-20 21:16:46

4

我剛剛嘗試了以下內容來創建一個強類型的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); 
    }