Asp.Net MVC 2 LabelFor Custom Text

后端 未结 4 2030
南旧
南旧 2021-01-01 17:39

Is there a way to use the LabelFor helper and customize the label text without having to use the DisplayNameAttribute in my model?

相关标签:
4条回答
  • 2021-01-01 18:07

    There is a new LabelFor overload in MVC3 RC that allows you to specify the labelText.

    0 讨论(0)
  • 2021-01-01 18:17

    Why not just create your own Html Helper?

    public static class MVCHelpers
    {
        public static string CustomLabelFor(this HtmlHelper helper, string ...)
    
        {
            return "<label ... </label>"
        }
    }
    
    0 讨论(0)
  • 2021-01-01 18:31

    I have created this html helpers for my project:

    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);
        }
    }
    

    I use them with "strongly typed" resources:

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

    Hope that helps...

    0 讨论(0)
  • 2021-01-01 18:31

    I have found this extemely useful. I think this is something missing from MVC 2. Or at least I have not found a way to do it built in.

    The simplest case details the need for this feature. I have two objects Contacts and Addresses. A Contact can have multiple Addesses

    Address

    • ID
    • Street
    • City
    • State

    Contact

    • ID
    • Bus Address ID
    • Home Address ID

    Now for a form which edits or displays a Contact, being able to change the DisplayNameAttribute on the Address 'Street' property is not very helpful since I really want one field to be 'Business Street' and another to be 'Home Street'.

    0 讨论(0)
提交回复
热议问题