2010-08-09 4 views
1

У меня есть веб-формы с аа пару boundfields в окне редактирования следующим образом:Форматирование текста в ASP.Net BoundField

<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 декодируется текст, как это должно выглядеть, я думаю, что есть дополнительный DataBind, что происходит после того, как Page_Load выходов, сбрасывающие BoundTextBoxField. Просто примечание, я проверил это как на BoundField, так и на BoundTextBoxField, и эффект одинаковый для обоих.

У меня была аналогичная проблема с выпадающим списком, который я использую в другой части моего приложения, только там я использовал событие onLoad для вызова функции для манипуляции данными после загрузки страницы и привязки данных. К сожалению, Boundfield, похоже, не имеет этого события, ближайшая вещь, которую я нашел, это свойство DataFormatString, но это только кажется полезным при работе с датами и валютой.

UPDATE:

В случае, если кто задавался вопросом, даже с HTMLEncode набор свойств к ложным, я получаю кодированный текст, когда окно редактирования перезагружается.

UPDATE 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 

ответ

0

Got it. Так как мои boundfields были заключены в 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" > 

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

Смежные вопросы