在Html.ActionLink(MVC 4)中使用Html.DisplayNameFor

时间:2013-11-06 11:19:12

标签: asp.net-mvc

在我的剃刀视图中,使用@ Html.ActionLink显示超链接,显示的文本是硬编码的(在本例中为“Brand”)。视图的模型是@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 })

请告诉我,怎么做。

2 个答案:

答案 0 :(得分:26)

您需要一个字符串,因此请将其设为ToHtmlString()

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

答案 1 :(得分:0)

您可以创建帮助程序类:

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