C# 如何在ASP.NET核心中获取ModelMetadata的值?

C# 如何在ASP.NET核心中获取ModelMetadata的值?,c#,asp.net-core,razor,razorengine,asp.net-core-5.0,C#,Asp.net Core,Razor,Razorengine,Asp.net Core 5.0,我有一个项目是用ASP.NET Core 5.0框架顶部的C#编写的 我试图通过直接使用ModelMetadata访问数据来手动渲染razor视图。在视图中,我希望遍历Html.ViewData.ModelMetadata中的所有属性,并手动获取每个属性的值 在旧的ASP.NET MVC中,我使用能够使用ModelMetadata上的Model属性访问值。然而,对于ASP.NET Core,我们似乎必须获得一个ModelExplorer的实例才能访问ModelMetadata的值 这是我试过的

我有一个项目是用ASP.NET Core 5.0框架顶部的
C#
编写的

我试图通过直接使用
ModelMetadata
访问数据来手动渲染razor视图。在视图中,我希望遍历
Html.ViewData.ModelMetadata
中的所有属性,并手动获取每个属性的值

在旧的ASP.NET MVC中,我使用能够使用
ModelMetadata
上的
Model
属性访问值。然而,对于ASP.NET Core,我们似乎必须获得一个
ModelExplorer
的实例才能访问
ModelMetadata
的值

这是我试过的

foreach (ModelMetadata propertyMetadata in Html.ViewData.ModelMetadata.Properties)
{
    ModelExplorer explorer = propertyMetadata.GetModelExplorerForType(propertyMetadata.ModelType, null);

    // do something with explorer.Model

    // I also tried 
    ModelExplorer explorer2 = html.ViewData.ModelMetadata.GetModelExplorerForType(propertyMetadata.ModelType, null);
}

资源管理器正在返回属性的正确模型类型,但在这种情况下,
explorer.Model
explorer2.Model
始终为空


如何正确创建将为我提供模型值的
ModelExplorer

事实证明,我可以使用委托
属性getter

这是我所做的一个例子

@{
    IEnumerable<ModelMetadata> properties = metadata.Properties.Where(metadata => metadata.ShowForDisplay).OrderBy(metadata => metadata.Order);
}

@foreach(var property in properties)
{
    <span>@(property.PropertyGetter(Model))</span>
}
@{
IEnumerable properties=metadata.properties.Where(metadata=>metadata.ShowForDisplay).OrderBy(metadata=>metadata.Order);
}
@foreach(属性中的var属性)
{
@(property.PropertyGetter(模型))
}

Hi@Jay,我无法在asp.net core中使用
Html.ViewData.ModelMetadata.Properties
。您是如何使用它的?也许您可以检查以下答案:。@Rena谢谢您的帮助。我想出来了。请检查我的答案