访问模板中代码后面的控件

时间:2015-03-19 17:08:43

标签: c# asp.net templates webforms code-behind

在使用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;根据管理员角色展示。

非常感谢任何帮助。

由于

2 个答案:

答案 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;得知。

我知道这是一件非常简单的事情,但万一我的代码可以帮助任何人,请在这里分享。

由于