如何隐藏控件并防止控件加载数据
How to hide a control and prevent control from loading data
我有一个页面包含以下自定义控件代码:
<SiteControls:Announcements runat="server" id="UserAnnouncements" />
假设我有一个 GridView 控件,这样我就可以涵盖多个场景。我需要通过检查布尔值来检查用户是否有权查看此控件:
PermissionsManagement.DoesUserHavePermission(userId, permissionId)
定义为:
public static class PermissionsManagement
{
public static bool DoesUserHavePermission(int userAccountId, int permissionId)
{
// Code Goes Here
}
}
如果用户没有权限,DoesUserHavePermission 将为 return false。我有 ASP.NET WebForms 页面布局,就好像用户拥有完全控制权一样(这意味着我拥有页面上的所有控件,如果他们没有权限,我想删除它们,而不是将每个控件添加到页面) .
如果用户没有权限,我可以在 Page_Load 函数上将控件的可见性设置为 false,但这不会阻止我的控件加载或在 GridView 的情况下加载其数据.如果用户没有使用(查看)控件的权限,如何阻止控件(用户控件或标准控件)加载任何数据?我尝试了以下行不通的内联代码:
<% if(PermissionsManagement.DoesUserHavePermission(1, 1))
{ %>
<SiteControls:Announcements runat="server" id="UserAnnouncements" />
<% } %>
但这不起作用,因为控件 Page_Load 仍然会为该控件触发,我假设任何其他控件都会加载数据,如果它是数据绑定的或行为类似于我的控件。
在不太了解您的代码的情况下,要找出确切的答案有点困难。不过,就我对你的问题的理解而言,这是我的答案。
加载 Announcements
或 GridView
的数据应该仍由您控制。我会在 Announcements 控件中公开一个实际为其加载数据的方法。对于 GridView,您应该简单地推迟 DataSource
的绑定,直到执行权限检查。当然除了隐藏(设置可见性)这些控件之外还需要做这些事情
看下面的代码,不完整,但足以表达一个想法:
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
// Check permissions here
if (allowed)
{
// For custom/user control
UserAnnouncements.GetAnnouncements();
// For grid view
GridView1.DataSource = GetGridviewData(); // GetGridviewData would return DataSet or anything valid.
GridView1.DataBind();
}
else
{
// Hide the controls
}
}
}
我有一个页面包含以下自定义控件代码:
<SiteControls:Announcements runat="server" id="UserAnnouncements" />
假设我有一个 GridView 控件,这样我就可以涵盖多个场景。我需要通过检查布尔值来检查用户是否有权查看此控件:
PermissionsManagement.DoesUserHavePermission(userId, permissionId)
定义为:
public static class PermissionsManagement
{
public static bool DoesUserHavePermission(int userAccountId, int permissionId)
{
// Code Goes Here
}
}
如果用户没有权限,DoesUserHavePermission 将为 return false。我有 ASP.NET WebForms 页面布局,就好像用户拥有完全控制权一样(这意味着我拥有页面上的所有控件,如果他们没有权限,我想删除它们,而不是将每个控件添加到页面) .
如果用户没有权限,我可以在 Page_Load 函数上将控件的可见性设置为 false,但这不会阻止我的控件加载或在 GridView 的情况下加载其数据.如果用户没有使用(查看)控件的权限,如何阻止控件(用户控件或标准控件)加载任何数据?我尝试了以下行不通的内联代码:
<% if(PermissionsManagement.DoesUserHavePermission(1, 1))
{ %>
<SiteControls:Announcements runat="server" id="UserAnnouncements" />
<% } %>
但这不起作用,因为控件 Page_Load 仍然会为该控件触发,我假设任何其他控件都会加载数据,如果它是数据绑定的或行为类似于我的控件。
在不太了解您的代码的情况下,要找出确切的答案有点困难。不过,就我对你的问题的理解而言,这是我的答案。
加载 Announcements
或 GridView
的数据应该仍由您控制。我会在 Announcements 控件中公开一个实际为其加载数据的方法。对于 GridView,您应该简单地推迟 DataSource
的绑定,直到执行权限检查。当然除了隐藏(设置可见性)这些控件之外还需要做这些事情
看下面的代码,不完整,但足以表达一个想法:
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
// Check permissions here
if (allowed)
{
// For custom/user control
UserAnnouncements.GetAnnouncements();
// For grid view
GridView1.DataSource = GetGridviewData(); // GetGridviewData would return DataSet or anything valid.
GridView1.DataBind();
}
else
{
// Hide the controls
}
}
}