在视图外使用Html.DisplayFor()或从DisplayFormat注释获取格式化属性

时间:2014-11-20 09:50:31

标签: c# asp.net asp.net-mvc razor data-annotations

我有一个实用程序类,其中包含一个方法,我可以从视图中调用和传递一个对象。我需要在该方法中调用Html.DisplayFor(),或者只需要一种方法来获取由DisplayFormat数据注释格式化的模型属性。

[DisplayFormat(DataFormatString = "{0:MMMM d, yyyy}")]
System.DateTime ReleaseDate { get; set; }

有没有办法在视图之外实现这个目标?我尝试过将HtmlHelper对象传递给方法:

public static string GetProductSnippet(Product product, HtmlHelper<List<Product>> helper)
{
    return helper.DisplayFor(p => p.ReleaseDate).ToString();
}

但这不会起作用,因为我的HtmlHelper对象并不总是具有相同的泛型类型。有没有办法在不使用HtmlHelper类的情况下获取属性的格式化版本?

1 个答案:

答案 0 :(得分:1)

您可以为该方法使用泛型类型:

public static string GetProductSnippet<T>(Product product, HtmlHelper<T> helper)
{
    return helper.DisplayFor(p => p.ReleaseDate).ToString();
}

var markup = GetProductSnippet<List<Product>>(product, helper);

至于获取没有帮助程序的代码,您可以从MVC源代码中获取显示帮助程序的实现,并根据您的需要进行调整