2013-01-16 33 views
1

據我所知在HtmlHelper類中沒有(擴展)方法,可以生成一個類型爲range的HTML5 input元素,所以我試圖實現我自己通過擴展HtmlHelper類:自定義HtmlHelper方法,生成一個<input type =「range」> HtmlString

public static class MvcHtmlHelper 
{ 
    public static HtmlString RangeFor<TModel, TProperty> 
    (this HtmlHelper<TModel> htmlHelper, 
     Expression<Func<TModel, TProperty>> expression, 
     object htmlAttributes) 
    { 
     var name = ExpressionHelper.GetExpressionText(expression); 
     var metadata = ModelMetadata.FromLambdaExpression(expression, 
         htmlHelper.ViewData); 
     //var min = (string)((ViewDataDictionary<TModel>)htmlAttributes)["min"]; 
     //var max = (string)((ViewDataDictionary<TModel>)htmlAttributes)["max"]; 
     //var value = (string)((ViewDataDictionary<TModel>)htmlAttributes)["value"]; 
     return Range(htmlHelper, min, max, value); 
    } 

    public static HtmlString Range(this HtmlHelper htmlHelper, 
     string name, string min, string max, string value = "0") 
    { 
     var builder = new TagBuilder("input"); 
     builder.Attributes["type"] = "range"; 
     builder.Attributes["name"] = name; 
     builder.Attributes["min"] = min; 
     builder.Attributes["max"] = max; 
     builder.Attributes["value"] = value; 
     return new HtmlString(builder.ToString(TagRenderMode.SelfClosing)); 
    } 
} 

我試圖仿效現有TextBoxFor擴展方法,它允許呼叫者通過匿名對象指定額外htmlAttributes。不過,我在上面的註釋行中獲得了InvalidCastException

任何人都可以點我獲得來自匿名htmlAttributes對象中的值(類似於如何TextBoxFor處理htmlAttributes

回答

2

InputExtensions.TextBoxFor手柄的正確方法屬性的方式如下:?

public static MvcHtmlString TextBoxFor<TModel, TProperty>(this HtmlHelper<TModel> htmlHelper, Expression<Func<TModel, TProperty>> expression, object htmlAttributes) 
{ 
    return InputExtensions.TextBoxFor<TModel, TProperty>(htmlHelper, expression, (IDictionary<string, object>) HtmlHelper.AnonymousObjectToHtmlAttributes(htmlAttributes)); 
} 

所以你必須使用它之前創建來自不同對象的屬性字典

+0

謝謝我會測試一下。 – rexcfnghk