【问题标题】:Access a control in Codebehind that's in a Template访问模板中的 Codebehind 中的控件
【发布时间】:2015-03-19 17:08:43
【问题描述】:

在我使用 Scafolding 的 ASP.NET WebForms 应用程序中,我有很多页面需要根据用户的角色来限制某些链接。 例如,在我的<LoggedTemplate> 以及其他<li> 的Site.Master 中,我也有一个用于管理页面的<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

同样,在ModelDefault 页面之一中,该列表具有查看、插入和删除的链接。如果用户是管理员,那么我只想显示插入和删除链接。这是它的代码:

       <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 方法中访问它。

我敢肯定,他们一定有某种方法可以解决这个问题,但我还没有找到。 这个问题怎么处理??请帮助我,我有几个页面和链接可以根据管理员角色隐藏和显示。

非常感谢任何帮助。

谢谢

【问题讨论】:

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


    【解决方案1】:

    我认为您正在寻找FindControl。例如:

    Label adminLabel = LoggedInTemplate.FindControl("adminLink") as Label;
    adminLabel.visible = true;
    

    在一些模板中为我工作,不知道 LoggedInTemplate 寿,但不明白为什么不。

    编辑:没有意识到你使用&lt;a&gt;。不知道为什么要混合 asp 超链接和 html,但无论如何,逻辑还是一样的。

    • 也只是 html。在顶部创建导航栏的替代品是什么?有什么想法!!!
  • 【解决方案2】:

    感谢 WEDEBE 指出将 &lt;a&gt; 和 . 那一点给了我一条出路。在我的设计中,我将 &lt;a&gt; 更改为 &lt;asp:HyperLink&gt; 并从 Codebehind 中删除了代码。仅在设计中,我尝试检查用户的角色,然后添加完整的&lt;li&gt;。像这样:

       <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) { %>
    

    像这样,在一行中,它不起作用。但是在新行中添加花括号时,它可以工作。我知道这听起来很奇怪,我也不知道为什么会这样。但事实是,我所面对和学到的。

    我知道这很简单,但为了以防我的代码对任何人有帮助,请在此处分享。

    谢谢

    【讨论】:

      猜你喜欢
      相关资源
      最近更新 更多
      热门标签