gpt4 book ai didi

c# - 如何使用 ValidationGroup 和自定义验证创建控件?

转载 作者:行者123 更新时间:2023-11-30 17:20:54 25 4
gpt4 key购买 nike

我想根据 Func 的结果制作面板 Visibility truefalse

我有一个包含控件的页面,代码如下:

<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 并在每个相应的组上添加一个事件,例如:

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);

最佳答案

我知道有两种方式:搜索自行注册。在搜索过程中,您将获得从页面开始的控件层次结构中的每个控件,递归地检查它是否是 PermissionPanel

第二种方式, self 注册,我喜欢你将更新 PermissionPanel 以在 Page.Items 内的列表中注册自己,并仅为控件注册验证处理程序在此列表中。

PermissionPanel 上,您可以执行类似的操作:

protected override void CreateChildControls()
{
base.CreateChildControls();

List <PermissionPanel> panels;

if (Page.Items["PermissionPanels"] == null)
Page.Items["PermissionPanels"] = panels = new List <PermissionPanel>();
else
panels = Page.Items["PermissionPanels"] as List <PermissionPanel>;

panels.Add(this);
}

在页面 OnPreRender 上,您可以遍历 Page.Items["PermissionPanels"] 并根据您的验证组注册验证处理程序。

关于c# - 如何使用 ValidationGroup 和自定义验证创建控件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3887157/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com