自定义HtmlHelper方法,生成一个HtmlString
本文关键字:quot type input HtmlString range 一个 方法 HtmlHelper 自定义 | 更新日期: 2023-09-27 17:53:55
据我所知,在HtmlHelper
类中没有(扩展)方法可以生成类型为range
的HTML5 input
元素,所以我试图通过扩展HtmlHelper
类来实现我自己的方法:
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
的方式)中获得值的正确方法?
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));
}
所以在使用匿名对象之前必须创建属性字典