从Linq表达式获取实际的字段数据

时间:2011-09-13 14:58:29

标签: asp.net linq asp.net-mvc-3 attributes expression

我正在开发一个ASP.NET MVC3应用程序,并且我使用一个属性来注释我的模型,该属性指定哪些角色可以更改模型所处的任何可能状态的特定字段。以此为例:

public class Model
{
   [RoleLimiter(
     new[]{Role.Admin, Role.BasicUser, Role.Validator}, // for draft
     new[]{Role.Admin, Role.BasicUser, Role.Validator}, // for awaiting validation
     new[]{Role.Admin})]                                // for published etc
   public string Subject {get;set;}
}

看起来有点乱,当然,如果需要的话,它很容易改变。现在,一旦我有了这个,就可以很容易地检查每个字段的当前状态,然后获取可以更改它的角色列表。如果当前角色不在其中,我将向控件添加disabled类。

我接下来要做的是制作一个HtmlHelper扩展名,其语法与普通EditorFor相同(或者甚至是直接TextBoxFor),但是检查并自动在幕后添加属性,但我仍然坚持从表达式获取字段信息,即:

你是如何得到的

HtmlHelper.TextBoxWithRoleLimitationsFor(x=>x.Subject);

附加到x.Subject

的属性

1 个答案:

答案 0 :(得分:2)

您获取LambdaExpression.Body并检查它是否为MemberExpression。然后,您可以从中获取MemberExpressionMemberget the custom attributes