Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/asp.net-mvc-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 如何在视图上下文之外获取ModelMetadata?_Asp.net Mvc_Asp.net Mvc 3 - Fatal编程技术网

Asp.net mvc 如何在视图上下文之外获取ModelMetadata?

Asp.net mvc 如何在视图上下文之外获取ModelMetadata?,asp.net-mvc,asp.net-mvc-3,Asp.net Mvc,Asp.net Mvc 3,我需要导出某种类型的数据(构建一个文件),这样数据就不会由视图生成(渲染),而是由纯C#代码生成(渲染),而不包含视图。但我需要一些模型元数据信息 我还询问如何在单元测试内部以及外部视图中构建模型元数据?假设您有一个包含一些元数据的视图模型: public class MyViewModel { [DisplayName("Bar")] public string Foo { get; set; } } 您可以如下方式检索此元数据: ModelMetadata metadata

我需要导出某种类型的数据(构建一个文件),这样数据就不会由视图生成(渲染),而是由纯C#代码生成(渲染),而不包含视图。但我需要一些模型元数据信息


我还询问如何在单元测试内部以及外部视图中构建模型元数据?

假设您有一个包含一些元数据的视图模型:

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);
如果要获取子属性的元数据,只需指定属性的名称:

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

创建域模型并通过控制器对其进行操作。我不确定你在问什么,你能试着更清楚一点吗?Darin(下面)的答案非常接近我的需要,但我不能调用由“generic param”为特定类型编译的FromLambdaExpression()。我只能在运行时(动态)确定类型。不幸的是,我只能在运行时确定类型。调用FromLambdaExpression()的方法是否只有一个类型类,或者手动构建一个表达式?
var type = typeof(MyViewModel);
var metadata = ModelMetadataProviders.Current.GetMetadataForProperty(null, type, "Foo");