У меня есть веб-форма с парой связанных полей в окне редактирования следующим образом:
<asp:BoundField DataField="TS_TITLE" HeaderText="Title" SortExpression="TS_TITLE" HeaderStyle-VerticalAlign="Top" HtmlEncode="True" >
<ControlStyle Width="500px" />
</asp:BoundField>
<custom:BoundTextBoxField DataField="TS_DESCRIPTION" HeaderText="Desription" HeaderStyle-VerticalAlign="Top" SortExpression="TS_DESCRIPTION"
TextMode="MultiLine" Rows="20" Columns="100" Wrap="True" HtmlEncode="True" />
Я использую свойство Html Encode BoundField для защиты от атак межсайтового скриптинга.То, что я хотел бы сделать, это когда пользователь снова открывает окно редактирования, я хочу, чтобы закодированный html был декодирован и представлен, html тэги и все.Моя проблема в том, что когда я пытаюсь декодировать HTML-код в коде позади, под функцией Page_Load, он не устанавливается, когда страница представляется пользователю, то есть это не имеет никакого эффекта.Вот фрагмент кода из Page_Load:
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
Dim dvrTest As DetailsViewRowCollection = DetailsView1.Rows
Dim DescriptionTB As TextBox = dvrTest.Item(1).Cells(1).Controls(0)
DescriptionTB.Text = HttpUtility.HtmlDecode(DescriptionTB.Text)
End Sub 'Page_Load
При отладке я могу видеть html-декодированный текст так, как он должен выглядеть, я предполагаю, что после выхода Page_Load возникает дополнительная привязка данных, которая сбрасываетBoundTextBoxField.Просто обратите внимание, я проверил это как на BoundField, так и на BoundTextBoxField, и эффект одинаков на обоих.
У меня была похожая проблема с выпадающим списком, который я использую в другой части моего приложения,только там я использовал событие onLoad для вызова функции, выполняющей манипулирование данными после загрузки страницы и привязки к данным.К сожалению, Boundfield, похоже, не имеет этого события, самое близкое, что я нашел, это свойство DataFormatString, но это, кажется, полезно только при работе с датами и валютой.
ОБНОВЛЕНИЕ:
Если кому-то было интересно, даже если для свойства HTMLEncode установлено значение false, я получаю закодированный текст при перезагрузке окна редактирования.
ОБНОВЛЕНИЕ 2:
Попытка переопределения метода OnDataBinding, ноэто, похоже, ничего не делает.
Protected Overrides Sub OnDataBinding(ByVal e As System.EventArgs)
Me.OnDataBinding(e)
Dim dvrTest As DetailsViewRowCollection = DetailsView1.Rows
Dim DescriptionTB As TextBox = dvrTest.Item(1).Cells(1).Controls(0)
DescriptionTB.Text = HttpUtility.HtmlDecode(DescriptionTB.Text)
End Sub