Как добавить атрибут «id» в Html.LabelFor () в ASP.NET MVC2? - PullRequest
5 голосов
/ 13 апреля 2010

Как добавить атрибут "id" в Html.LabelFor () в ASP.NET MVC2?

Это мой код этикетки:

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

Это моя неудачная попытка:

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

Спасибо.

Ответы [ 4 ]

4 голосов
/ 06 сентября 2010

Вот помощник, который должен делать то, что вам нужно:

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);
}

простая модификация от помощника LabelFor в источнике mvc asp.net.

0 голосов
/ 19 ноября 2013

Возможно, поведение изменилось со времени MVC2, потому что, хотя я использую Razor и VB.NET, я получил этот код для работы, и он должен быть примерно таким же, за исключением возможного @, который вы поставили перед id (сейчас я использую MVC4):

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

Это сгенерировало следующий HTML:

<label for="ItemNumber" id="ItemNumberL">ItemNumber</label>
0 голосов
/ 13 апреля 2010

Как насчет этого метода расширения

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);
        }
    }

Редактировать

Я думаю, что лучшим способом было бы использовать tagbuilder, подобный в этом примере , и использовать функцию MergeAttribute для включения идентификатора.

0 голосов
/ 13 апреля 2010

Методы LabelFor, TextBoxFor, XXXFor автоматически добавляют идентификатор на основе имени свойства. Я не думаю, что вы можете изменить это. Если вы хотите установить идентификатор, вам нужно использовать не-For методы, такие как Html.TextBox.

...