.NET MVC-как назначить класс Html.LabelFor?
код
<%= Html.LabelFor(model => model.Name) %>
производит
<label for="Name">Name</label>
но я хочу, чтобы этот
<label for="Name" class="myLabel">Name</label>
как вы это делаете?
3 ответа:
хорошо, глядя на источник (система.Сеть.Mvc.Формат html.LabelExtensions.cs) для этого метода, похоже, нет способа сделать это с помощью HtmlHelper в ASP.NET MVC 2. Я думаю, что лучше всего либо создать свой собственный HtmlHelper, либо сделать следующее Для этой конкретной метки:
<label for="Name" class="myLabel"><%= Model.Name %></label>
к сожалению,MVC 3 HTML-код.Метод LabelFor () не имеет сигнатур метода, разрешающих прямое объявление класса. Однако,MVC 4 добавляет 2 перегрузки, которые принимают анонимные htmlAttributes объекта.
Как и во всех HtmlHelpers важно помнить, что компилятор C# видит
class
как зарезервированное слово.поэтому, если вы используете атрибут @ перед классом, он работает вокруг проблемы, т. е.:
@Html.LabelFor(model => model.PhysicalPostcode, new { @class= "SmallInput" })
символ " @ " делает "класс" литерал, который передается через.
перегрузка LabelFor:
public static class NewLabelExtensions { public static MvcHtmlString LabelFor<TModel, TValue>(this HtmlHelper<TModel> html, Expression<Func<TModel, TValue>> expression, object htmlAttributes) { return LabelFor(html, expression, new RouteValueDictionary(htmlAttributes)); } public static MvcHtmlString LabelFor<TModel, TValue>(this HtmlHelper<TModel> html, Expression<Func<TModel, TValue>> expression, IDictionary<string, object> htmlAttributes) { ModelMetadata metadata = ModelMetadata.FromLambdaExpression(expression, html.ViewData); string htmlFieldName = 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.MergeAttributes(htmlAttributes); tag.Attributes.Add("for", html.ViewContext.ViewData.TemplateInfo.GetFullHtmlFieldId(htmlFieldName)); tag.SetInnerText(labelText); return MvcHtmlString.Create(tag.ToString(TagRenderMode.Normal)); } }