Asp.Net MVC 2 LabelFor Custom Text - PullRequest
       12

Asp.Net MVC 2 LabelFor Custom Text

18 голосов
/ 16 января 2010

Есть ли способ использовать помощник LabelFor и настраивать текст метки, не используя DisplayNameAttribute в моей модели?

Ответы [ 4 ]

20 голосов
/ 23 января 2010

Я создал этот помощник HTML для моего проекта:

public static class MyLabelExtensions
{
    public static MvcHtmlString Label(this HtmlHelper htmlHelper, string forName, string labelText)
    {
        return Label(htmlHelper, forName, labelText, (object) null);
    }

    public static MvcHtmlString Label(this HtmlHelper htmlHelper, string forName, string labelText,
                                      object htmlAttributes)
    {
        return Label(htmlHelper, forName, labelText, new RouteValueDictionary(htmlAttributes));
    }
    public static MvcHtmlString Label(this HtmlHelper htmlHelper, string forName, string labelText,
                                      IDictionary<string, object> htmlAttributes)
    {
        var tagBuilder = new TagBuilder("label");
        tagBuilder.MergeAttributes(htmlAttributes);
        tagBuilder.MergeAttribute("for", forName.Replace(".", tagBuilder.IdAttributeDotReplacement), true);
        tagBuilder.SetInnerText(labelText);
        return MvcHtmlString.Create(tagBuilder.ToString(TagRenderMode.Normal));
    }

    public static MvcHtmlString LabelFor<TModel, TProperty>(this HtmlHelper<TModel> htmlHelper,
                                                            Expression<Func<TModel, TProperty>> expression,
                                                            string labelText)
    {
        return LabelFor(htmlHelper, expression, labelText, (object) null);
    }
    public static MvcHtmlString LabelFor<TModel, TProperty>(this HtmlHelper<TModel> htmlHelper,
                                                            Expression<Func<TModel, TProperty>> expression,
                                                            string labelText, object htmlAttributes)
    {
        return LabelFor(htmlHelper, expression, labelText, new RouteValueDictionary(htmlAttributes));
    }
    public static MvcHtmlString LabelFor<TModel, TProperty>(this HtmlHelper<TModel> htmlHelper,
                                                            Expression<Func<TModel, TProperty>> expression,
                                                            string labelText,
                                                            IDictionary<string, object> htmlAttributes)
    {
        string inputName = ExpressionHelper.GetExpressionText(expression);
        return htmlHelper.Label(inputName, labelText, htmlAttributes);
    }
}

Я использую их с "строго типизированными" ресурсами:

<%= Html.LabelFor(m=>m.NickName, UserStrings.NickName) %>

Надеюсь, это поможет ...

14 голосов
/ 11 ноября 2010

В MVC3 RC появилась новая перегрузка LabelFor, которая позволяет указывать labelText.

1 голос
/ 19 марта 2010

Я нашел это чрезвычайно полезным. Я думаю, что это чего-то не хватает в MVC 2. Или, по крайней мере, я не нашел способ сделать это встроенным.

В простейшем случае подробно описывается необходимость этой функции. У меня есть два объекта Контакты и Адреса. Контакт может иметь несколько адресов

Адрес

  • ID
  • Улица
  • Город
  • Государство

Контакт

  • ID
  • Идентификатор адреса шины
  • Домашний адрес ID

Теперь для формы, которая редактирует или отображает контакт, возможность изменить атрибут DisplayNameAttribute для свойства Address на улице не очень полезен, поскольку я действительно хочу, чтобы одно поле было «Business Street», а другое - «Home Street» ».

1 голос
/ 16 января 2010

Почему бы просто не создать свой собственный Html Helper?

public static class MVCHelpers
{
    public static string CustomLabelFor(this HtmlHelper helper, string ...)

    {
        return "<label ... </label>"
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...