Подтвердить что ты не робот

Asp.Net MVC 2 LabelFor Custom Text

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

4b9b3361

Ответ 1

Я создал этот 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) %>

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

Ответ 2

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

Ответ 3

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

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

    {
        return "<label ... </label>"
    }
}

Ответ 4

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

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

Адрес

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

Контакт

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

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