如何在ASP.NET MVC2中为Html.LabelFor()添加“id”属性?

时间:2010-04-13 16:00:05

标签: asp.net-mvc-2 html-helper

如何在ASP.NET MVC2中为Html.LabelFor()添加“id”属性?

这是我的标签代码:

<%=Html.LabelFor(x => x.FirstName)%>

这是我失败的尝试:

<%=Html.LabelFor(x => x.FirstName, new { @id = "first-name" } )%>

感谢。

4 个答案:

答案 0 :(得分:4)

这是一个应该做你需要的帮手:

public static MvcHtmlString LabelFor<TModel, TValue>(this HtmlHelper<TModel> html, Expression<Func<TModel, TValue>> expression, string id)
{
    ModelMetadata meta = ModelMetadata.FromLambdaExpression(expression, html.ViewData), 
    string ExpressionHelper.GetExpressionText(expression)

    string labelText = metadata.DisplayName ?? metadata.PropertyName ?? htmlFieldName.Split('.').Last();
    if (String.IsNullOrEmpty(labelText)) {
        return MvcHtmlString.Empty;
    }

    TagBuilder tag = new TagBuilder("label");
    tag.Attributes.Add("for", html.ViewContext.ViewData.TemplateInfo.GetFullHtmlFieldId(htmlFieldName));
    tag.MergeAttribute("id", id);
    tag.SetInnerText(labelText);
    return tag.ToMvcHtmlString(TagRenderMode.Normal);
}

来自asp.net mvc源代码中的LabelFor助手的简单修改。

答案 1 :(得分:0)

LabelFor,TextBoxFor,XXXFor方法根据属性名称自动添加id。我不认为你可以覆盖它。如果你想能够设置id,你需要使用像Html.TextBox这样的“非For”方法。

答案 2 :(得分:0)

这种扩展方法怎么样

public static class LabelExtensions

    {
        public static string Label(this HtmlHelper helper, string target, string id, string text)
        {
            return String.Format("<label for='{0}' id='{1}'>{2}</label>", target,id, text);
        }
    }

编辑

我认为更好的方法是使用类似于this example的tagbuilder并使用MergeAttribute函数来包含id。

答案 3 :(得分:0)

也许自从MVC2以来这种行为发生了变化,因为虽然我正在使用Razor和VB.NET,但是我已经使用了这个代码,并且它应该与您放置的@的可能例外情况大致相同在id之前(我现在正在使用MVC4):

@Html.LabelFor(Function(model) model.ItemNumber, New With {.id = "ItemNumberL"})

这会生成以下HTML:

<label for="ItemNumber" id="ItemNumberL">ItemNumber</label>