Веб-части Sharepoint Рендеринг HTML и элементов управления - PullRequest
0 голосов
/ 21 января 2010

У меня есть веб-часть, которая отображает вывод HTML в методе RenderWebPart, а также создает элементы управления в CreateChildControls, оба метода объявлены как переопределенные в веб-части.

У меня вопрос, как контролировать порядок отображения элементов управления и вывода html?

В настоящий момент я вызываю EnsureChildControls () в методе RenderWebPart, чтобы убедиться, что все элементы управления в CreateChildControls созданы и , а затем вывод html.

Что, если я хочу отобразить элемент управления на странице, затем вывод html, а затем еще один элемент управления ниже в этом порядке?

Ответы [ 2 ]

4 голосов
/ 21 января 2010

Я бы порекомендовал перенести весь ваш статический HTML из функции Render в функцию CreateChildControls. Если вам нужно, вы можете добавить обычный старый HTML, используя Label s, WebControl s или даже лучше ... LiteralControl s. Затем вы можете просто добавить их в свою коллекцию элементов управления.

Пример:

WebControl container = new WebControl(System.Web.UI.HtmlTextWriterTag.Div);
StringBuilder sb = new StringBuilder();
sb.Append("<ul>");
foreach (Node child in this.Children)
{
    sb.AppendFormat("<li><a href=\"{0}\">{1}</a></li>", url, name);
}
sb.Append("</ul>");
LiteralControl l = new LiteralControl();
l.Text = sb.ToString();
container.Controls.Add(l);
0 голосов
/ 31 января 2010

Я на самом деле относительно новичок в SharePoint, и поначалу я был очень удивлен, что нужно было создавать отдельные элементы управления вручную, без графического интерфейса, как при обычной веб-разработке на ASP.NET. Тем не менее, у меня был очень очень хороший совет, который позволил мне по-прежнему использовать графический интерфейс и использовать его для создания веб-частей для Sharepoint. Это включает в себя оборачивание WebUserControls в веб-части.

Ссылка, которую я использовал здесь: http://www.a2zdotnet.com/View.aspx?id=95

Вы в основном создаете WebUserControls (файл .ascx) на веб-сайте, и поэтому вы можете просто добавить свои элементы управления, как и любую обычную страницу .aspx. Вы также можете иметь обычный файл с выделенным кодом (.ascx.cs). Затем перетащите файл .ascx в файл .aspx, чтобы он затем использовал ваш WebUserControl. Когда ваши файлы .ascx готовы и собраны, вы копируете их в каталог Layouts в 12-Hive вашего SharePoint Server. Лучше всего создать там подкаталог, чтобы избежать столкновения с другими файлами там.

Затем необходимо создать отдельный проект Class Library , в котором будет включен код вашего WebPart. Затем вы указываете WebPart использовать ваши файлы .ascx в каталоге раскладок. Примерно так:

protected override void  CreateChildControls()
    {
        base.CreateChildControls();
        try
        {
            this.Controls.Clear();
            _myControl = this.Page.LoadControl("\\_layouts\\MyFolder\\WebUserControl.ascx");
            this.Controls.Add(_myControl);
        }
        catch (Exception e)
        {
            err = e.Message;
        }

Ссылка, которую я предоставил выше, предоставляет больше информации, но в основном вы компилируете проект webpart, а затем добавляете DLL в каталог BIN вашего сервера sharepoint (c: \ inetpub \ wwwroot \ wss \ etc) , Кстати, вам не нужно компилировать его в GAC .

Затем вы добавляете запись в web.config вашего сервера sharepoint:

<SafeControl Assembly="MyWebUserControl, Version=1.0.0.0, Culture=neutral, PublicKeyToken=9f4da00116c38ec5" Namespace="MyWebUserControl" TypeName="*" Safe="True" />

Если вы не не скомпилировали DLL в GAC, но вместо этого BIN вам просто нужно:

<SafeControl Assembly="UserControl" Namespace="UserControl" TypeName="*" Safe="True" />

Опять же, ссылка, которую я разместил выше, написана в коде, ссылка на GUID, которая необходима, только если вы поместили DLL в GAC. Вам не нужна GUID-часть кода, если вы размещены только в каталоге BIN.

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

Ash

...