Я хочу сделать панели Visibility
true
или false
на основе результата Func
.
У меня есть страница с элементами управления, как в следующем коде:
<asp:Panel ID="Panel2" runat="server">
<asp:Panel ID="Panel3" runat="server">
<c:PermissionPanel ID="P1" runat="server" ValidationGroup="Val1">
Validation Group 1 - OK
</c:PermissionPanel>
</asp:Panel>
</asp:Panel>
<c:PermissionPanel ID="P2" runat="server" ValidationGroup="Val1">
Validation Group 1 - OK
</c:PermissionPanel>
<hr />
<c:PermissionPanel ID="P3" runat="server" ValidationGroup="Val2">
Validation Group 2 - OK
</c:PermissionPanel>
<asp:Panel ID="Panel4" runat="server">
<asp:Panel ID="Panel1" runat="server">
<c:PermissionPanel ID="P4" runat="server" ValidationGroup="Val2">
Validation Group 2 - OK
</c:PermissionPanel>
</asp:Panel>
</asp:Panel>
Короче, у меня есть 4 PermissionPanel
, который может быть внутри других элементов управления.
Код PermissionPanel
следующий:
public class PermissionPanel : Panel
{
public delegate bool OnValidate();
public event OnValidate Validate;
public string ValidationGroup { get; set; }
protected override void OnPreRender(EventArgs e)
{
this.Visible = (Validate != null ? Validate() : false);
base.OnPreRender(e);
}
}
Я хочу получитьвсе PermissionPanel
s со страницы и добавить событие для каждого соответственно в его группу, например:
protected void Page_Load(object sender, EventArgs e)
{
// Magic code here. Linq is very welcome
// GetPageControls<PermissionPanel>("Val1").AddEvent(() => return true);
// GetPageControls<PermissionPanel>("Val2").AddEvent(() => return false);
}
Приведенный выше код сделает все панели с ValidationGroup
== Val1
видимыми, в то время как Val2
не будет обработано.
Итак, вопросы : Как мне этого добиться?Есть ли лучший способ сделать это?
Короче говоря, я хочу добавить Func
, который будет методом проверки, позволяющим показывать панели или нет.Реальный пример:
// If post owner is the logged user, show controls like edit and delete
() => return (user != null && user.ID == post.UserID);