Использование Html.DisplayNameFor внутри Html.ActionLink(MVC 4)

В моем представлении бритвы я использую @Html.ActionLink для отображения гиперссылки, а текст, который отображается на экране, жестко закодирован (в этом случае "Бренд" ). модель для представления - @model IEnumerable

Exisitng View

@Html.ActionLink("Brand", "Index", new { sortOrder = ViewBag.BrandSortParm })

Вместо жесткого кодирования текста хотелось бы использовать @Html.DisplayNameFor как первый параметр в @Html.ActionLink, что-то вроде упомянутого ниже, которое дает ошибку компиляции

@Html.ActionLink(@Html.DisplayNameFor(model => model.BRAND_NAME), "Index", new { sortOrder = ViewBag.BrandSortParm })

Пожалуйста, дайте мне знать, как это сделать.

Ответ 1

Вам нужна строка, поэтому сделайте ее ToHtmlString()

@Html.ActionLink(Html.DisplayNameFor(model => model.BRAND_NAME).ToHtmlString(), "Index", new { sortOrder = ViewBag.BrandSortParm })

Ответ 2

Вы можете создать вспомогательный класс:

public static class ExtensionMethods
    {
        public static string DisplayName<TModel, TValue>(this HtmlHelper<TModel> html, Expression<Func<TModel, TValue>> expression)
        {
            var metadata = ModelMetadata.FromLambdaExpression<TModel, TValue>(expression, html.ViewData);
            return metadata.DisplayName;
        }
    }

Добавьте ссылку на свой класс в представлении, а затем используйте его:

@Html.ActionLink(Html.DisplayName(model=> model.BRAND_NAME), "Index", new { sortOrder = ViewBag.BrandSortParm })