我需要导出某种数据(构建一个文件),所以数据不会被视图生成(渲染),而是由纯C#代码生成(视图)。但我需要一些ModelMetadata信息。如何在视图上下文之外获取ModelMetadata?
我也问如何在单元测试中建立ModelMetadata,那么在Views之外呢?
我需要导出某种数据(构建一个文件),所以数据不会被视图生成(渲染),而是由纯C#代码生成(视图)。但我需要一些ModelMetadata信息。如何在视图上下文之外获取ModelMetadata?
我也问如何在单元测试中建立ModelMetadata,那么在Views之外呢?
假设你有一些元数据视图模型:
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");
创建您的域模型,并通过控制器操纵它。我不确定你在问什么,你可以试着更清楚一些吗? – Grixxly 2012-07-18 22:53:56
Darin的答案(下)非常接近我所需要的,但我无法调用由“泛型参数”编译的特定类型的FromLambdaExpression()。我只能在运行时(动态)确定类型。 – Luciano 2012-07-19 13:52:58