html元素属性,自定义HtmlHelper.xxxxFor

时间:2012-11-23 22:50:10

标签: c# asp.net-mvc attributes html-helper

我已经创建了一个扩展HtmlHelper的简单方法..基本上它是TextBoxFor方法,但abit自定义以适应我的目的更好..反正..我认为HtmlHelper使用新的方式{@attributename =“ attributevalue“} thingy来创建html元素属性真的很整洁..所以我的问题是......我怎么能做同样的事情呢?

ViewCode:

@Html.DaisyTextBoxFor(model => model.Text, new { @class="asd" })

HelperCode:

    public static MvcHtmlString DaisyTextBoxFor<TModel, TProperty>(this HtmlHelper<TModel> htmlHelper, Expression<Func<TModel, TProperty>> expression, IDictionary<string,object> attributes = null)
    {
        var value = ((PropertyViewModelProperty)htmlHelper.ViewData.Model.GetType().GetProperty(ExpressionHelper.GetExpressionText(expression)).GetValue(htmlHelper.ViewData.Model, null)).Value;

        return MvcHtmlString.Create(String.Format("<input name=\"{0}\" value=\"{1}\" />", CreateForInputName(typeof(TModel), htmlHelper), value));
    }

    private static string CreateForInputName(Type model,HtmlHelper htmlHelper)
    {
        return HttpContext.Current.Server.HtmlEncode(model.AssemblyQualifiedName + "_" + htmlHelper.ViewData["propertyName"].ToString() + '_' + htmlHelper.ViewData["propertyGuid"].ToString());
    }

1 个答案:

答案 0 :(得分:0)

我从来没有尝试过,但下面的事情不会起作用吗?

public static MvcHtmlString DaisyTextBoxFor<TModel, TProperty>(this HtmlHelper<TModel> htmlHelper, Expression<Func<TModel, TProperty>> expression, IDictionary<string,object> attributes = null)
    {
        var value = ((PropertyViewModelProperty)htmlHelper.ViewData.Model.GetType().GetProperty(ExpressionHelper.GetExpressionText(expression)).GetValue(htmlHelper.ViewData.Model, null)).Value;

        return MvcHtmlString.Create(String.Format("<input name=\"{0}\" value=\"{1}\" class=\"{2}\" />", CreateForInputName(typeof(TModel), htmlHelper), value, attributes["class"]));
    }

请注意class={2}部分中的MvcHtmlString.Create部分。