代码之家  ›  专栏  ›  技术社区  ›  Goyuix

用于有条件呈现嵌套HTML的简单用户控件

  •  2
  • Goyuix  · 技术社区  · 16 年前

    <uc:check id="uc" List="Shared Documents" Permission="OpenItems" runat="server">
      <!-- have some HTML content here that is rendered if the permission is true -->
    </uc:check>
    

    然后在现实中 用户控件,类似于:

    <%@ Control language="C#" ClassName="check" %>
    <% 
      // determine permission magic placeholder
      if (DoesUserHavePermissions(perm))
      {
        // render nested HTML content
      }
      else
      {
        // abort rendering as to not show nested HTML content
      }
    %>
    

    creating a templated control on MSDN ,虽然这会起作用,但对于我正在尝试的事情来说,似乎真的有点过分了。是否有一个控件已经基于布尔表达式或更简单的模板示例呈现内容?

    http://msdn.microsoft.com/en-us/library/36574bf6.aspx

    以下代码可在ascx中用于对此非常简单的版本进行建模:

    <%@ Control Language="C#" ClassName="PermissionCheck" %>
    <%@ Import Namespace="System.ComponentModel"  %>
    <script runat="server">
        void Page_Init()
        {
            if (Allowed != null)
            {
                Panel container = new Panel();
                Allowed.InstantiateIn(container);
                PermissionBasedMessage.Controls.Add(container);
            }
        }
    
        [PersistenceMode(PersistenceMode.InnerProperty)]
        public ITemplate Allowed { get; set; }
    </script>
    <asp:Placeholder runat="server" ID="PermissionBasedMessage" />
    

    并在调用HTML页中引用它:

    <%@ Register src="PermissionCheck.ascx" tagname="PermissionCheck" tagprefix="uc1" %>
    
    <uc1:PermissionCheck ID="PermissionCheck1" runat="server">
      <Allowed>Allowed Access</Allowed>
    </uc1:PermissionCheck>
    
    4 回复  |  直到 16 年前
        1
  •  1
  •   Tom Clarkson    16 年前

    其他答案适用于问题的一般形式,但对于检查权限,SPSecurityTrimmedControl可能会执行您需要的操作。

        2
  •  3
  •   M4N    16 年前

    控件(例如,将此放入App\ u代码中):

    namespace MyControls
    {
        public class MyPanel : Panel
        {
            public string Permission { get; set; }
            public string List { get; set; }
            protected override void Render(System.Web.UI.HtmlTextWriter writer)
            {
                if (UserHasPermission()) base.Render(writer);
            }
        }
    }
    

    <%@ Page ... %>
    <%@ Register Namespace="MyControls" TagPrefix="mc" %>
    <html>
    ...
        <mc:MyPanel runat="server" List="Shared Documents" Permission="OpenItems">
            put content and/or other controls here
        </mc:MyPanel>
    ...
    
        3
  •  2
  •   TheGeekYouNeed    16 年前

    为什么不扩展LiteralControl,为设置添加属性,然后将html呈现为LieralControl的.Value?看起来很简单,而且比使用模板控件要简单得多

        4
  •  1
  •   Saturn K    16 年前

    用占位符控件包装内容,并将控件的可见性设置为true或false(具有.Visible=false的控件不会呈现任何html)

    <asp:PlaceHolder id=“phWrapper”runat=“server”>

    </asp:PlaceHolder>

    然后在代码隐藏中设置phWrapper.Visible=DoesUserHavePermissions(perm);

    希望有帮助!

    推荐文章