访问模板中代码隐藏中的控件
Access a control in Codebehind that's in a Template
在我使用脚手架的 ASP.NET WebForms 应用程序中,我有许多页面需要根据用户的角色限制某些链接。
例如,在我的 Site.Master 和我的 <LoggedTemplate>
以及其他 <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>
在我的代码隐藏中,在 Page_Load
中,我无法仅访问 adminLink
。
同样,在 Model
的 Default
页面之一中,该列表具有指向查看、插入和删除的链接。如果用户是管理员,那么只有我想显示插入和删除链接。这是它的代码:
<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
,但同样无法在 Page_Load
方法中访问它。
我敢肯定,他们一定是某种解决这个问题的方法,但我还没有找到。
如何处理这个问题??请帮助我,我有几个页面和链接可以根据管理员角色隐藏和显示。
非常感谢任何帮助。
谢谢
我想你在找 FindControl
。例如:
Label adminLabel = LoggedInTemplate.FindControl("adminLink") as Label;
adminLabel.visible = true;
在一些模板中对我有用,虽然我不了解 LoggedInTemplate,但不明白为什么不这样做。
编辑:没有意识到你在使用 <a>
。不确定为什么要混合使用 asp 超链接和 html,但无论如何,逻辑仍然相同。
感谢 WEDEBE 指出混合 <a>
和 。
那一点给了我一条出路。在我的设计中,我将 <a>
更改为 <asp:HyperLink>
并从代码隐藏中删除了代码。仅在设计中,我尝试检查用户的 hte 角色,然后添加完整的 <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) { %>
像这样,在一行中,它不起作用。但是在新行中添加花括号时,它起作用了。我知道这听起来很奇怪,我也搞不懂为什么会这样。但这是我所面对和学到的事实。
我知道这是很简单的事情,但为了以防万一我的代码对任何人有帮助,已在此处分享。
谢谢
在我使用脚手架的 ASP.NET WebForms 应用程序中,我有许多页面需要根据用户的角色限制某些链接。
例如,在我的 Site.Master 和我的 <LoggedTemplate>
以及其他 <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>
在我的代码隐藏中,在 Page_Load
中,我无法仅访问 adminLink
。
同样,在 Model
的 Default
页面之一中,该列表具有指向查看、插入和删除的链接。如果用户是管理员,那么只有我想显示插入和删除链接。这是它的代码:
<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
,但同样无法在 Page_Load
方法中访问它。
我敢肯定,他们一定是某种解决这个问题的方法,但我还没有找到。 如何处理这个问题??请帮助我,我有几个页面和链接可以根据管理员角色隐藏和显示。
非常感谢任何帮助。
谢谢
我想你在找 FindControl
。例如:
Label adminLabel = LoggedInTemplate.FindControl("adminLink") as Label;
adminLabel.visible = true;
在一些模板中对我有用,虽然我不了解 LoggedInTemplate,但不明白为什么不这样做。
编辑:没有意识到你在使用 <a>
。不确定为什么要混合使用 asp 超链接和 html,但无论如何,逻辑仍然相同。
感谢 WEDEBE 指出混合 <a>
和 。
那一点给了我一条出路。在我的设计中,我将 <a>
更改为 <asp:HyperLink>
并从代码隐藏中删除了代码。仅在设计中,我尝试检查用户的 hte 角色,然后添加完整的 <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) { %>
像这样,在一行中,它不起作用。但是在新行中添加花括号时,它起作用了。我知道这听起来很奇怪,我也搞不懂为什么会这样。但这是我所面对和学到的事实。
我知道这是很简单的事情,但为了以防万一我的代码对任何人有帮助,已在此处分享。
谢谢