我正在尝试实现一个要求,该要求允许我根据用户角色或其他业务逻辑更改 html 控件的状态。例如,某些用户不应该能够编辑某个模型属性,或者在某些情况下我什至不希望控件呈现到 html DOM。
在 HTML 帮助器中,元数据可以告诉帮助器是否呈现控件,或者它可以使其只读/禁用。我不想在这里重新发明轮子,我只想通过在运行时根据逻辑更改动作过滤器中的元数据来使用已经存在的东西。我不希望这种逻辑出现在我的视图中,如果我不需要的话,我也不想为每个 html 控件创建自定义帮助程序。
我试图做的是创建一个操作过滤器来处理我的业务层中的评估逻辑规则,然后对给定 model.property 的元数据进行更改。
问题是我对元数据的修改似乎并没有出现在视图中。似乎我对操作过滤器中元数据的更改不是通过引用进行的,因此我没有修改用于视图的同一实例?
public override void OnResultExecuting(ResultExecutingContext filterContext)
{
var trans = filterContext.Controller.ViewData.ModelMetadata.Properties.Where(e => e.PropertyName == "Transaction").FirstOrDefault();
trans.DisplayName = "Show FOO!";
}
我究竟做错了什么?