在使用Scafolding的ASP.NET WebForms应用程序中,我有很多页面需要根据用户的角色限制某些链接。
例如,在我的<LoggedTemplate>
中的Site.Master以及其他<li>
中,我还有一个<li>
用于管理页面。默认情况下,这是不可见的,但如果用户以管理员身份登录,那么我希望它可见。这是我无法做到的。这是代码:
<LoggedInTemplate>
<ul class="nav navbar-nav">
<li><a runat="server" id="adminLink" visible="false" href="~/Admin/Admin_Page">Admin</a></li>
<li><a runat="server" href="~/Inquiries/Default.aspx">Inquiry</a></li>
在我的Codebehind中,Page_Load
我无法仅访问adminLink
。
Simialrly,在Default
的{{1}}页面之一中,该列表包含指向View,Insert&amp;删除。如果用户是管理员,那么我只想显示插入&amp;删除链接。这是代码:
Model
我尝试添加
<td>
<asp:HyperLink runat="server" NavigateUrl='<%# FriendlyUrl.Href("~/Channels/Details", Item.ChannelId) %>' Text="View" /> |
<asp:HyperLink runat="server" ID="editLink" NavigateUrl='<%# FriendlyUrl.Href("~/Channels/Edit", Item.ChannelId) %>' Text="Edit" /> |
<asp:HyperLink runat="server" NavigateUrl='<%# FriendlyUrl.Href("~/Channels/Delete", Item.ChannelId) %>' Text="Delete" />
</td>
</tr>
</ItemTemplate>
但这是错误的。我向<% if (CommonUtilities.IsUserAdmin) { %>
hyperlinks for Insert & delete & finally
<% } %>
添加了ID
,但又无法通过editLink
方法访问它。
我确信,他们必须采取一些方法来解决这个问题,但我还是找不到。 如何处理这个问题?请帮帮我,我有几页&amp;链接隐藏&amp;根据管理员角色展示。
非常感谢任何帮助。
由于
答案 0 :(得分:1)
我认为您正在寻找FindControl
。例如:
Label adminLabel = LoggedInTemplate.FindControl("adminLink") as Label;
adminLabel.visible = true;
在一些模板中为我工作,不知道LoggedInTemplate,但不知道为什么不。
编辑:没有意识到你使用<a>
。不知道为什么你混合asp超链接和HTML,但无论如何,逻辑仍然是相同的。
答案 1 :(得分:0)
感谢WEDEBE指出要混合<a>
和。
那一点给了我一条出路。在我的设计中,我将<a>
更改为<asp:HyperLink>
&amp;从Codebehind中删除了代码。在设计中我只是尝试检查用户的角色。然后添加完整<li>
。像这样:
<LoggedInTemplate>
<ul class="nav navbar-nav">
<% if (VincitoreCRMApplication.CommonUtilities.IsCurrentUserAdmin)
{ %>
<li> <asp:HyperLink runat="server" id="adminLink" NavigateUrl="~/Admin/Admin_Page.aspx">Admin</asp:HyperLink> </li>
<% } %>
<li><a runat="server" href="~/Inquiries/Default.aspx">Inquiry</a></li>
使用其他2个HyperLink也可以采用相同的方式:
<% if (VincitoreCRMApplication.CommonUtilities.IsCurrentUserAdmin)
{ %>
<asp:HyperLink runat="server" ID="editLink" NavigateUrl='<%# FriendlyUrl.Href("~/Channels/Edit", Item.ChannelId) %>' Text="Edit" /> |
<asp:HyperLink runat="server" NavigateUrl='<%# FriendlyUrl.Href("~/Channels/Delete", Item.ChannelId) %>' Text="Delete" />
<% } %>
这很有效。但是我意识到一件事,如果我添加
<% if (VincitoreCRMApplication.CommonUtilities.IsCurrentUserAdmin) { %>
像这样,在一行中,它不起作用。但是在新行中添加花括号时,它可以工作。我知道这听起来很奇怪,我也无法弄清楚为什么会发生这种情况。但事实上,我所面对的是&amp;得知。
我知道这是一件非常简单的事情,但万一我的代码可以帮助任何人,请在这里分享。
由于