[英]how can i return the directory reflected by onchanged() method in other class
[英]How can I recursively return the reflected names of a property and all its parents
因此,我有以下帮助程序方法,该方法返回给定表达式的属性的名称。 它在MVC应用程序中用于根据需要绑定到的属性在视图中设置隐藏字段的ID。
public static string GetIDFromPropertyName<T>(Expression<Func<T>> exp)
{
return (((MemberExpression)(exp.Body)).Member).Name;
}
但是我想要的是能够传递一个表达式,例如:
GetIDFromPropertyName(() => model.AComplexProperty.AnotherComplexProperty.ASimpleProperty)
并回到我身边:
AComplexProperty_AnotherComplexProperty_ASimpleProperty
我怎样才能做到这一点?
更新:为了清楚起见,我需要在服务器端而不是Razor中执行此操作。 最终传递给我的局部视图的模型将不包含属性本身,而只是具有ID的字符串属性(用于隐藏字段),因此无法使用内置的IdFor扩展
要从此GetIDFromPropertyName(() => aBCD)
获取"B_C_D"
,可以使用以下代码:
public static string GetIDFromPropertyName<T>(Expression<Func<T>> exp)
{
var members = new List<string>();
GetIDFromPropertyName(exp.Body, members);
// members contains {"D", "C", "B", "a"}
// now simply return the appropiate result, example:
members.RemoveAt(members.Count -1);
members.Reverse();
return members.Aggregate((s1, s2) => s1 + "_" + s2);
}
private static void GetIDFromPropertyName(Expression exp, List<string> members)
{
var expression = exp as MemberExpression;
if(expression != null)
{
var memberExpression = expression;
members.Add(memberExpression.Member.Name);
GetIDFromPropertyName(memberExpression.Expression, members);
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.