如何在asp mvc 2中为LabelFor编写自定义覆盖?

时间:2011-04-28 07:39:16

标签: asp.net-mvc-2 label strongly-typed-helper

嗨,我有一段代码会出错。

<%=Html.LabelFor(m => m.Id, new { @Class = "textbox-medium" })%>

错误:

方法'LabelFor'没有重载需要'2'参数。

有谁知道如何解决这个问题?

由于

1 个答案:

答案 0 :(得分:5)

也许是某些内容:

public static class LabelExtensions
{
    public static MvcHtmlString LabelFor<TModel, TProperty>(
        this HtmlHelper<TModel> htmlHelper,
        Expression<Func<TModel, TProperty>> ex,
        object htmlAttributes
    )
    {
        var metadata = ModelMetadata.FromLambdaExpression<TModel, TProperty>(ex, htmlHelper.ViewData);
        var htmlFieldName = ExpressionHelper.GetExpressionText(ex);
        var labelText = metadata.DisplayName;
        if (string.IsNullOrEmpty(labelText))
        {
            labelText = htmlFieldName.Split('.').Last();
        }
        if (string.IsNullOrEmpty(labelText))
        {
            return MvcHtmlString.Empty;
        }

        var tagBuilder = new TagBuilder("label");
        var id = htmlHelper.ViewContext.ViewData.TemplateInfo.GetFullHtmlFieldName(htmlFieldName);
        tagBuilder.Attributes.Add("for", id);
        var attributes = new RouteValueDictionary(htmlAttributes);
        tagBuilder.MergeAttributes(attributes);
        tagBuilder.SetInnerText(labelText);
        return MvcHtmlString.Create(tagBuilder.ToString(TagRenderMode.Normal));
    }
}

然后:

<%= Html.LabelFor(x => x.Id, new { @class = "textbox-medium" }) %>