Форматирование текста в граничном поле ASP.Net - PullRequest
1 голос
/ 10 августа 2010

У меня есть веб-форма с парой связанных полей в окне редактирования следующим образом:

<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

1 Ответ

0 голосов
/ 10 августа 2010

Понял. Поскольку мои границы были заключены в DetailsView, я использовал событие onLoad DetailsView, чтобы вызвать функцию в коде для декодирования любого html-текста в тексте Boundfields

''' <summary>
''' Decodes any HTML formatted tags in the Title and Description Textboxes of the Edit Window
''' </summary>
''' <param name="sender"></param>
''' <param name="e"></param>
''' <remarks></remarks>
Protected Sub HTMLDecode(ByVal sender As Object, ByVal e As System.EventArgs)
    If Page.IsPostBack = False Then
        ''Grab the Title and Description text boxes from the RowCollection
        Dim dvrTest As DetailsViewRowCollection = DetailsView1.Rows
        Dim TitleTB As TextBox = dvrTest.Item(0).Cells(1).Controls(0)
        Dim DescriptionTB As TextBox = dvrTest.Item(1).Cells(1).Controls(0)
        ''Decode HTML tags that are in either text box
        DescriptionTB.Text = HttpUtility.HtmlDecode(DescriptionTB.Text)
        TitleTB.Text = HttpUtility.HtmlDecode(TitleTB.Text)
    End If
End Sub 'HTMLDecode

И вызов его в DetailsView с помощью события onLoad

<asp:DetailsView ID="DetailsView1" runat="server" Height="260px" Width="500px" AutoGenerateRows="False"
            DataKeyNames="TS_ID" DataSourceID="SqlDataSource2" EnableModelValidation="true"
            GridLines="Both" Font-Names="Arial" HorizontalAlign="Center" OnLoad="HTMLDecode" >

Если есть более простые альтернативы, я был бы рад их услышать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...