Различное поведение элементов управления Sharepoint при обратной передаче

К сожалению, некоторые элементы управления Sharepoint ведут себя по-разному при обратной передаче: я начал с:

<SharePointWebControls:NoteField id="3" FieldName="MultiText" runat="server" />
<PublishingWebControls:RichLinkField id="4" FieldName="Link" runat="server" />

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

<PublishingWebControls:EditModePanel runat=server id="EditModePanelView" PageDisplayMode="Display" SuppressTag="true">
   <SharePointWebControls:FieldValue id="3" FieldName="MultiText" runat="server"/>
   <SharePointWebControls:FieldValue id="4" FieldName="Link" runat="server" />
</PublishingWebControls:EditModePanel>

<PublishingWebControls:EditModePanel runat="server" id="EditModePanelEdit">
   <SharePointWebControls:NoteField id="7" FieldName="MultiText" runat="server" />
   <PublishingWebControls:RichLinkField id="8" FieldName="Link" runat="server" />
</PublishingWebControls:EditModePanel>

... больше нет пустых полей:

  • В режиме редактирования используются определенные веб-элементы управления.
  • В режиме отображения страницы используется SharepointWebControls:FieldValue для простой визуализации содержимого.

Теперь возникла новая проблема: любые разрывы строк (отображаемые как br-теги), которые вводятся в режиме редактирования для NoteField, теряются при визуализации как SharePointWebControls:FieldValue. Есть ли способ визуализации HTML-кода NoteField, как в режиме отображения? Чтобы разрывы не потерялись и не было дополнительных неразрывных пробелов?

1 ответ

Решение

В итоге я переписал элементы управления Sharepoint, как предложено здесь:

Мне пришлось переписать NoteField#RenderFieldForDisplay так, чтобы NoteField вел себя одинаково при обратной передаче и при GET:

protected override void RenderFieldForDisplay(HtmlTextWriter output)
{
  TextWriter writer = new StringWriter();
  base.RenderFieldForDisplay(new HtmlTextWriter(writer));
  string x=  writer.ToString();
  string y= "&#160;";
  string z= "<br/>";
  x= x.Equals(y) ? x.Replace(y, string.Empty) : x.Replace(" ", y).Replace("\r\n", z).Replace("\n", z).Replace("\r", z);
  output.Write(x);
}

Это работает, но это отстой. Я до сих пор не понимаю, почему элементы управления sharepoint ведут себя по-разному при обратной передаче и заменяют, например, br-Tags переносами строк...

Другие вопросы по тегам