Есть ли способ использовать помощник LabelFor и настроить текст ярлыка без использования DisplayNameAttribute в моей модели?
Asp.Net MVC 2 LabelFor Custom Text
Ответ 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".