해결하려는 대상에 대한 설명 만 주어진다면 기본 제공되는 것들을 상속하고 속성을 추가하는 자체 컨트롤을 만드는 것이 좋습니다. 그런 다음 컨트롤을 통해 가시성 검사를 직접 수행 할 수 있습니다. 당신이 당신의 Web.config에 넣고 경우
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;
}
}
}
와 같은 뭔가가 다음 (죄송합니다, 여기에 적절한 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" />
이것은 여러 가지 방법 중 하나 일뿐입니다. 물론 모든 요구 사항에 따라 달라집니다. 하지만 컨트롤을 관리 할 수있는 가능성을 가질 수 있도록 자신 만의 클래스가 필요할 것이라고 확신합니다.
꽤 보이는! 하지만 내 페이지에 많은 ASP.Net 컨트롤이 있습니다. 모든 기본 컨트롤을 재정의 된 컨트롤로 바꾸고 싶지 않습니다. ASP.net이 자체적으로 제어 할 수 있습니까? – MVC3Seeker
Visible 속성에 호출을 임베드하여 시도한 것처럼 할 수 있다고 가정합니다. 그러나 정확하게 기억한다면, 대신에 데이터 바인딩 식 '<% # CheckVisibility() %>'를 사용해야합니다. 당신이 질문에 사용했던 표준 코드 너겟'<% = CheckVisibility() %>'. 그리고 코드 숨김의 페이지에서'DataBind()'호출이 필요하다고 생각합니다. 나는 장기적으로 당신이 컨트롤을 상속하고 그들을 대체함으로써 더 나을 것이라고 생각합니다. 그것은 훨씬 더 유연합니다. –