Простой пользовательский контроль для условного рендеринга вложенного HTML - PullRequest
2 голосов
/ 23 апреля 2010

То, что я хотел бы сделать, - это возможность передать два атрибута пользовательскому элементу управления, ListName и Permission, например, так:

<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
  }
%>

Я прочитал страницу на , создав шаблонный элемент управления на 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" />

Примечание. Я упростил проверку в методе Page_Init для этого примера кода.При необходимости можно добавить дополнительные логические проверки.

И ссылаться на них на вызывающей HTML-странице:

<%@ Register src="PermissionCheck.ascx" tagname="PermissionCheck" tagprefix="uc1" %>

<uc1:PermissionCheck ID="PermissionCheck1" runat="server">
  <Allowed>Allowed Access</Allowed>
</uc1:PermissionCheck>

Ответы [ 4 ]

3 голосов
/ 23 апреля 2010

Вы можете создать пользовательский элемент управления вместо пользовательского элемента управления: получить из панели asp.net, добавить два свойства, а затем отобразить элемент управления, только если у пользователя есть необходимые разрешения.Например, что-то вроде этого:

Элемент управления (например, укажите это в App_Code):

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>
...
2 голосов
/ 23 апреля 2010

Почему бы вам не расширить LiteralControl, добавить свойства для ваших настроек, а затем отобразить html в .Value LieralControl? Кажется довольно простым и намного меньше головной боли, чем использование шаблонов управления

1 голос
/ 23 апреля 2010

Другие ответы подходят для общей формы вашего вопроса, но для проверки разрешений SPSecurityTrimmedControl может сделать то, что вам нужно.

1 голос
/ 23 апреля 2010

Оберните ваш контент с помощью элемента-заполнителя и установите для видимости элемента управления значение true или false (элементы управления, имеющие .Visible = false, не будут отображать HTML)


...
</ Жерех: PlaceHolder>

Тогда в вашем коде позади установите phWrapper.Visible = DoesUserHavePermissions (perm);

Надеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...