String 如何在MVC3中获取模型属性名称的字符串表示形式?

String 如何在MVC3中获取模型属性名称的字符串表示形式?,string,asp.net-mvc-3,class,variables,model,String,Asp.net Mvc 3,Class,Variables,Model,我有以下型号: Public Class MyModel Public Property MyModelId As Integer Public Property Description As String Public Property AnotherProperty As String End Class 是否有一种方法可以像下面的代码一样,以字符串形式获取模型的属性名 Dim propertyName as String = GetPropertyNameAs

我有以下型号:

Public Class MyModel

    Public Property MyModelId As Integer
    Public Property Description As String
    Public Property AnotherProperty As String

End Class
是否有一种方法可以像下面的代码一样,以字符串形式获取模型的属性名

Dim propertyName as String = GetPropertyNameAsStringMethod(MyModel.Description)

因此,propertyName变量的值为“Description”。

以下是一个可用于任何属性的帮助程序扩展方法:

public static class ReflectionExtensions
{
    public static string PropertyName<T>(this T owner, 
        Expression<Func<T, object>> expression) where T : class
    {
        if (owner == null) throw new ArgumentNullException("owner");
        var memberExpression = (MemberExpression)expression.Body;
        return memberExpression.Member.Name;
    }

}
公共静态类ReflectionExtensions
{
公共静态字符串PropertyName(此为T所有者,
表达式),其中T:class
{
如果(owner==null)抛出新的ArgumentNullException(“owner”);
var memberExpression=(memberExpression)expression.Body;
返回memberExpression.Member.Name;
}
}

但是,这只适用于类的实例。您可以编写一个类似的扩展方法,直接对类型进行操作。

以下是一个可用于任何属性的帮助程序扩展方法:

public static class ReflectionExtensions
{
    public static string PropertyName<T>(this T owner, 
        Expression<Func<T, object>> expression) where T : class
    {
        if (owner == null) throw new ArgumentNullException("owner");
        var memberExpression = (MemberExpression)expression.Body;
        return memberExpression.Member.Name;
    }

}
公共静态类ReflectionExtensions
{
公共静态字符串PropertyName(此为T所有者,
表达式),其中T:class
{
如果(owner==null)抛出新的ArgumentNullException(“owner”);
var memberExpression=(memberExpression)expression.Body;
返回memberExpression.Member.Name;
}
}
但是,这只适用于类的实例。您可以编写一个类似的扩展方法,直接对该类型进行操作。

检查此SO线程上的Darin Dimitrov-

class-Foo
{
公共字符串条{get;set;}
}
班级计划
{
静态void Main()
{
var result=Get(x=>x.Bar);
控制台写入线(结果);
}
静态字符串Get(表达式)
{
var me=expression.Body作为MemberExpression;
如果(me!=null)
{
返回me.Member.Name;
}
返回null;
}
}
希望这有帮助。

检查此SO线程上的Darin Dimitrov-

class-Foo
{
公共字符串条{get;set;}
}
班级计划
{
静态void Main()
{
var result=Get(x=>x.Bar);
控制台写入线(结果);
}
静态字符串Get(表达式)
{
var me=expression.Body作为MemberExpression;
如果(me!=null)
{
返回me.Member.Name;
}
返回null;
}
}

希望这对您有所帮助。

您需要使用反射进行操作

堆栈溢出上已经有很多帖子,如下所示:

我相信答案大致如下:

 string prop = "name"; 
 PropertyInfo pi = myObject.GetType().GetProperty(prop);

你需要用反射来做

堆栈溢出上已经有很多帖子,如下所示:

我相信答案大致如下:

 string prop = "name"; 
 PropertyInfo pi = myObject.GetType().GetProperty(prop);

创建一个扩展方法,然后在需要的地方使用它

Private Shared Function GetPropertyName(Of T)(exp As Expression(Of Func(Of T))) As String
    Return (DirectCast(exp.Body, MemberExpression).Member).Name
End Function

也可以看看post。

创建一个扩展方法,然后在需要的地方使用它

Private Shared Function GetPropertyName(Of T)(exp As Expression(Of Func(Of T))) As String
    Return (DirectCast(exp.Body, MemberExpression).Member).Name
End Function

也可以看看这篇文章。

我已经解决了这个问题,编辑了一点@NiranjanKala的源代码示例

在vb.Net中这样转换代码

<System.Runtime.CompilerServices.Extension()> _
Public Function GetPropertyName(Of T, TResult)(expression As Expression(Of Func(Of T, TResult))) As String
    Dim [me] = TryCast(expression.Body, MemberExpression)
    If [me] IsNot Nothing Then
        Return [me].Member.Name
    End If
    Return Nothing
End Function
Dim propertyName as String = GetPropertyName(Of MyModel, String)(Function(x) x.Description)

然后propertyName变量将“Description”作为字符串值。

我通过编辑一点@NiranjanKala的源代码示例解决了这个问题

在vb.Net中这样转换代码

<System.Runtime.CompilerServices.Extension()> _
Public Function GetPropertyName(Of T, TResult)(expression As Expression(Of Func(Of T, TResult))) As String
    Dim [me] = TryCast(expression.Body, MemberExpression)
    If [me] IsNot Nothing Then
        Return [me].Member.Name
    End If
    Return Nothing
End Function
Dim propertyName as String = GetPropertyName(Of MyModel, String)(Function(x) x.Description)

然后,propertyName变量将“Description”作为字符串值。

没有这样的方法可以按您的要求执行。您可以使用反射获取属性名称string prop=“name”;PropertyInfo pi=myObject.GetType().GetProperty(prop)`重复:没有这样的方法可以按您的要求执行。您可以使用反射获取属性名称string prop=“name”;PropertyInfo pi=myObject.GetType().GetProperty(prop)`重复:注意此方法不是最快的。注意此方法不是最快的。