2012-07-18 64 views
9

我需要导出某种数据(构建一个文件),所以数据不会被视图生成(渲染),而是由纯C#代码生成(视图)。但我需要一些ModelMetadata信息。如何在视图上下文之外获取ModelMetadata?

我也问如何在单元测试中建立ModelMetadata,那么在Views之外呢?

+1

创建您的域模型,并通过控制器操纵它。我不确定你在问什么,你可以试着更清楚一些吗? – Grixxly 2012-07-18 22:53:56

+0

Darin的答案(下)非常接近我所需要的,但我无法调用由“泛型参数”编译的特定类型的FromLambdaExpression()。我只能在运行时(动态)确定类型。 – Luciano 2012-07-19 13:52:58

回答

17

假设你有一些元数据视图模型:

public class MyViewModel 
{ 
    [DisplayName("Bar")] 
    public string Foo { get; set; } 
} 

你可以检索元数据是这样的:

ModelMetadata metadata = ModelMetadata.FromLambdaExpression<MyViewModel, string>(
    x => x.Foo, 
    new ViewDataDictionary<MyViewModel>() 
); 

Assert.AreEqual("Bar", metadata.DisplayName); 

UPDATE:

的要求,在意见下面是如何获得元数据,如果在运行时只知道类型:

var type = typeof(MyViewModel); 
var metadata = ModelMetadataProviders.Current.GetMetadataForType(null, type); 

,如果你想获得一个孩子属性的元数据只是指定属性的名称:

var type = typeof(MyViewModel); 
var metadata = ModelMetadataProviders.Current.GetMetadataForProperty(null, type, "Foo"); 
+0

不幸的是我只能确定运行时的类型。有一种方法可以调用FromLambdaExpression()只有一个Type类,也许手动创建一个表达式? – Luciano 2012-07-19 13:44:26

+0

@Luciano,看我的更新。 – 2012-07-19 13:54:07

+0

不错!非常感谢 ! – Luciano 2012-07-19 14:15:28

相关问题