我想使用一个包含指向其他页面的链接的控件,并将所有这些链接放在一个控件(EG 表)中,这样我就可以用代码隐藏它(仅对管理员显示)
除了表格,我应该使用哪个控件?我应该使用面板还是其他东西?
如果要隐藏某些链接,请使用简单的超链接控件并仅为管理员设置可见属性。您可以使用Repeater控件来呈现表格并在ItemTemplate中设置超链接。
否则你可以使用 Placeholder 并在其中放置表格,并设置 Placeholder 的可见属性,Placehodler 不会渲染任何东西。
毕竟你可以使用同一个表,添加 ID 和 runat="server" 属性并设置为从后面的代码可见。
例如 :
<table ID="myTable" runat="server">
...
然后在代码中隐藏整个表格:
protected void Page_Load(object sender, EventArgs e)
{
myTable.Visible = false;
}
正如 Antonio Bakula 所说,取决于您的目标,您可以将每个单独的链接设置为不可见。
或者,如果它们很多,则将它们放在可以批发打开和关闭的面板中。
面板是一个不错的选择。
An<asp:Panel />
在 HTML 中呈现为<div>
. 如果您不熟悉 HTML,a<div>
只是一个盒子,您可以在其中放入任何东西(包括 a <table>
)。例如,StackOverflow 上的每个答案都显示在<div>
.
如果您设置Visible="false"
,那么整个<div>
内容将从您的 HTML 输出中删除,即使它存在于.aspx
页面上。基本上,您可以使用这种方法非常有效地隐藏非管理员的链接。
但是,这仍然不是很安全。恶意用户通过猜测来尝试找到管理员链接是很常见的(例如:/admin/default.aspx
、/admin/admin.aspx
等...)。您应该使用角色来阻止用户访问您的管理员链接。角色甚至会阻止某些类型的用户(例如:未登录的用户或非管理员用户)访问这些页面。用户将看到一条错误消息,而不是看到该页面。
您可以使用 apanel
在其中插入所有其他控件(超链接、按钮...等),并且在您的代码中,您可以通过调用显示和隐藏面板以及里面的所有内容
panel.visible=true
panel.visible=false
我会使用 a<asp:PlaceHolder
因为它只是一个占位符..并且没有其他语义价值,如表格、面板或这些东西..