Umesh K.
Umesh K.

Reputation: 311

How to Insert Line Break using LabelFor in MVC

I have in my Model:

[Display(Name = "Check to enter <break> the Quantity of items")]
public bool IsLimitedQuantity { get; set; }

and I am using

@Html.LabelFor(shop => shop.IsLimitedQuantity) 

in my view.

Please suggest how I can fix this, because the label is just showing <break> as it is, instead of breaking to a new line.

Upvotes: 2

Views: 4009

Answers (2)

Darin Dimitrov
Darin Dimitrov

Reputation: 1038710

You could write a custom LabelFor helper which doesn't HTML encode the text as does the standard LabelFor helper:

public static class LabelExtensions
{
    public static IHtmlString UnencodedLabelFor<TModel, TProperty>(this HtmlHelper<TModel> html, Expression<Func<TModel, TProperty>> expression)
    {
        var metadata = ModelMetadata.FromLambdaExpression(expression, html.ViewData);
        var htmlFieldName = ExpressionHelper.GetExpressionText(expression);
        var text = (metadata.DisplayName ?? (metadata.PropertyName ?? htmlFieldName.Split(new char[] { '.' }).Last<string>()));
        if (string.IsNullOrEmpty(text))
        {
            return MvcHtmlString.Empty;
        }
        var tagBuilder = new TagBuilder("label");
        tagBuilder.Attributes.Add("for", TagBuilder.CreateSanitizedId(html.ViewContext.ViewData.TemplateInfo.GetFullHtmlFieldName(htmlFieldName)));
        tagBuilder.InnerHtml = text;
        return new HtmlString(tagBuilder.ToString(TagRenderMode.Normal));
    }
}

and then use this custom helper in the view:

@Html.UnencodedLabelFor(x => x.IsLimitedQuantity)

Now the HTML tags in the display name will be rendered without encoding:

[Display(Name = "Check to enter <br/> the Quantity of items")]
public bool IsLimitedQuantity { get; set; }

Upvotes: 8

Deepesh
Deepesh

Reputation: 5604

Using Html decode may help. MVC for security reasons encode all the values.

How to display HTML stored in a database from an ASP.NET MVC view?

Upvotes: 0

Related Questions