Asumiendo que tiene un modelo de vista con algunos metadatos:
public class MyViewModel
{
[DisplayName("Bar")]
public string Foo { get; set; }
}
se podía recuperar estos metadatos como esto:
ModelMetadata metadata = ModelMetadata.FromLambdaExpression<MyViewModel, string>(
x => x.Foo,
new ViewDataDictionary<MyViewModel>()
);
Assert.AreEqual("Bar", metadata.DisplayName);
ACTUALIZACIÓN:
a lo solicitado en los comentarios A continuación, se muestra cómo obtener los metadatos si solo se conoce el tipo en tiempo de ejecución:
var type = typeof(MyViewModel);
var metadata = ModelMetadataProviders.Current.GetMetadataForType(null, type);
y si desea obtener los metadatos de una propiedad hijo acaba de especificar el nombre de la propiedad:
var type = typeof(MyViewModel);
var metadata = ModelMetadataProviders.Current.GetMetadataForProperty(null, type, "Foo");
Crear su modelo de dominio y manipularlo mediante su controlador. No estoy seguro de lo que estás preguntando ¿puedes tratar de ser más claro? – Grixxly
La respuesta de Darin (abajo) está muy cerca de lo que necesito, pero no puedo llamar FromLambdaExpression() compilado por "param genérico" para un tipo específico. Solo puedo determinar el tipo en tiempo de ejecución (dinámicamente). – Luciano