Различное поведение элементов управления 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= " ";
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 переносами строк...