我正在开发一个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
?
答案 0 :(得分:2)
您获取LambdaExpression.Body
并检查它是否为MemberExpression
。然后,您可以从中获取MemberExpression
和Member
的get the custom attributes。