Asp.net MVC Метка для - PullRequest
       6

Asp.net MVC Метка для

8 голосов
/ 08 апреля 2010

У меня есть следующее

 <label for="Forename">Forename</label>
 <%= Html.TextBoxFor(m => m.Customer.Name.Forename) %>

проблема в том, что это отображается как

<label for="Forename">Forename</label>
<input type="text" value="" name="Customer.Name.Forename" id="Customer_Name_Forename">

не то, что я хочу ofc.

Я хотел бы, чтобы расширение правильно отображало метку (т. Е. С атрибутом for = "", имеющим значение входного идентификатора), есть ли что-нибудь в MVC 2, которое делает это наивно, прежде чем я начну писать свое собственное расширение?

Ответы [ 2 ]

13 голосов
/ 08 апреля 2010
<%= Html.LabelFor(m => m.Customer.Name.Forename) %>
<%= Html.TextBoxFor(m => m.Customer.Name.Forename) %>
11 голосов
/ 08 апреля 2010

Следующее позволит переопределить отображаемое имя по умолчанию, альтернатива использованию приведенного ниже - испортить вашу модель, используя атрибут [DisplayName]

Использование

<%= Html.LabelFor(m => m.Customer.Name.Forename, "First Name")%> 

Код

namespace System.Web.Mvc.Html
{
    public static class LabelExtensions
    {
        public static MvcHtmlString LabelFor<TModel, TValue>(this HtmlHelper<TModel> html, Expression<Func<TModel, TValue>> expression, string displayName)
        {
            return LabelHelper(html, ModelMetadata.FromLambdaExpression<TModel, TValue>(expression, html.ViewData), ExpressionHelper.GetExpressionText(expression), displayName);
        }

        internal static MvcHtmlString LabelHelper(HtmlHelper html, ModelMetadata metadata, string htmlFieldName, string displayName)
        {
            string str = displayName ?? metadata.DisplayName ?? (metadata.PropertyName ?? htmlFieldName.Split(new char[] { '.' }).Last<string>());
            if (string.IsNullOrEmpty(str))
            {
                return MvcHtmlString.Empty;
            }
            TagBuilder builder = new TagBuilder("label");
            builder.Attributes.Add("for", html.ViewContext.ViewData.TemplateInfo.GetFullHtmlFieldId(htmlFieldName));
            builder.SetInnerText(str);
            return MvcHtmlString.Create(builder.ToString(TagRenderMode.Normal));
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...