Как удалить таблицы, отображаемые вокруг веб-частей в области Rich Content? - PullRequest
0 голосов
/ 26 марта 2012

Как мне переопределить таблицы, отображаемые вокруг веб-частей в области «Rich Content»?

Я успешно удалил таблицы вокруг веб-частей и их веб-частей, но не могу понять, как удалить таблицы вокруг Rich.Веб-части области содержимого.

Я не использую веб-часть редактора содержимого.

Используемая мной область «Rich Content» создается с помощью PublishingWebControls: RichHtmlField.

Этоэлемент управления, содержащий контент и веб-части.

Bounty здесь .

Ответы [ 2 ]

0 голосов
/ 31 марта 2012
0 голосов
/ 26 марта 2012

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

  1. Создание настраиваемого текстового поля. Переопределите метод render, вызовите base.Render, используя объект TextWriter, и поместите полученный HTML-код в переменную, которую вы затем «очищаете» вручную перед записью в вывод.

  2. Создание настраиваемого текстового поля. Переопределите рендер, но вместо вызова base.Render, позаботьтесь о магии вставки веб-частей самостоятельно. (Это, вероятно, хитрее.)

Удачи!

Обновление, пример кода, который я использую для минимизации вывода RichHtmlField:

public class SlimRichHtmlField : RichHtmlField
{

    protected override void Render(HtmlTextWriter output)
    {
        if (IsEdit() == false)
        {
            //This will remove the label which precedes the bodytext which identifies what
            //element this is. This is also identified using the aria-labelledby attribute
            //used by for example screen readers. In our application, this is not needed.
            StringBuilder sb = new StringBuilder();
            StringWriter sw = new StringWriter(sb);

            HtmlTextWriter htw = new HtmlTextWriter(sw);

            base.Render(htw);
            htw.Flush();                
            string replaceHtml = GetReplaceHtml();
            string replaceHtmlAttr = GetReplaceHtmlAttr();
            sb.Replace(replaceHtml, string.Empty).Replace(replaceHtmlAttr, string.Empty);
            output.Write(sb.ToString());                
        }
        else
        {
            base.Render(output);
        }
    }

    private string GetReplaceHtmlAttr()
    {
        return " aria-labelledby=\"" + this.ClientID + "_label\"";
    }

    private string GetReplaceHtml()
    {
        var sb = new StringBuilder();
        sb.Append("<div id=\"" + this.ClientID + "_label\" style='display:none'>");
        if (this.Field != null)
        {
            sb.Append(SPHttpUtility.HtmlEncode(this.Field.Title));
        }
        else
        {
            sb.Append(SPHttpUtility.HtmlEncode(SPResource.GetString("RTELabel", new object[0])));
        }
        sb.Append("</div>");

        return sb.ToString();
    }

    private bool IsEdit()
    {
        return SPContext.Current.FormContext.FormMode == SPControlMode.Edit || SPContext.Current.FormContext.FormMode == SPControlMode.New;
    }
}

Этот код затем используется вашей версткой следующим образом:

<YourPrefix:SlimRichHtmlField ID="RichHtmlField1" HasInitialFocus="false" MinimumEditHeight="200px" FieldName="PublishingPageContent" runat="server" />
...