あなたが解決しようとしていることの説明だけを考えると、組み込みのものから継承し、いくつかのプロパティを追加する独自のコントロールを作成することをお勧めします。その後、コントロールは可視性チェックを自分で行うことができます。何かのようなもの
namespace StackOverflowTest
{
public class Label : System.Web.UI.WebControls.Label
{
public string DisplayRoles { get; set; }
protected override void OnPreRender(EventArgs e)
{
base.OnPreRender(e);
Visible = PermissionHelper.CheckPermission("Display", DisplayRoles.Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries));
}
}
public static class PermissionHelper
{
public static bool CheckPermission(string function, string[] allowedRoles)
{
// TODO: hit some sort of cache, so you don't make a bajillion queries to the DB
return true;
}
}
}
そして、これを web.config に入れると (申し訳ありませんが、ここで適切な XML フォーマットを行う方法がわかりません):<system.web>
<pages>
<controls>
<add tagPrefix="sot" assembly="StackOverflowTest" namespace="StackOverflowTest"/>
</controls>
</pages>
</system.web>
これをマークアップに追加できます。
<sot:Label ID="AdminLabel" runat="server" Text="Bind this in OnLoad/!IsPostback or something" DisplayRoles="Admin,Management" />
これは、これを行うことができる多くの方法の 1 つにすぎません。もちろん、それはすべて要件に依存します。しかし、コントロールを管理しやすくするためには、コントロール用の独自のクラスが必要になると確信しています。