开发者

Asp.Net MVC 2 LabelFor Custom Text

开发者 https://www.devze.com 2022-12-16 08:33 出处:网络
Is there a way to use the LabelFor helper and customize the label te开发者_如何学JAVAxt without having to use the DisplayNameAttribute in my model? I have created this html helpers for my project:

Is there a way to use the LabelFor helper and customize the label te开发者_如何学JAVAxt without having to use the DisplayNameAttribute in my model?


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...


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


Why not just create your own Html Helper?

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

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


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

精彩评论

暂无评论...
验证码 换一张
取 消