J'ai un formulaire en ligne avec aa quelques BoundFields dans une fenêtre d'édition comme suit:texte Mise en forme dans un 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" />
J'utilise la propriété Html Encode du BoundField pour sécuriser contre cross attaques de script de site. Ce que je voudrais faire, c'est quand un utilisateur rouvre la fenêtre d'édition, je veux que le code HTML codé soit décodé et présenté, les balises html et tout. Mon problème est que lorsque j'essaie de décoder le code HTML dans le code-behind, sous la fonction Page_Load, il n'est pas défini lorsque la page est présentée à l'utilisateur, c'est-à-dire qu'il n'a aucun effet. Voici l'extrait de code du 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
Lors du débogage, je peux voir la car il doit regarder le texte HTML décodé, je suppose qu'il ya un DataBind supplémentaire qui se produit après la sortie de Page_Load qui remet à zéro le BoundTextBoxField. Juste une note, j'ai testé cela sur BoundField et BoundTextBoxField et l'effet est le même sur les deux. J'ai eu un problème similaire avec une liste déroulante que j'utilise dans une autre partie de mon application, seulement là j'utilisais l'événement onLoad pour appeler une fonction pour manipuler des données après que la page ait été chargée et databound. Malheureusement, Boundfield ne semble pas avoir cet événement, la chose la plus proche que j'ai trouvée est la propriété DataFormatString, mais cela ne semble être utile que lorsqu'on travaille avec des dates et des devises.
MISE À JOUR:
Au cas où quelqu'un se demandait, même avec l'ensemble de la propriété HTMLEncode false, je reçois le texte codé lorsque la fenêtre d'édition est Reloaded.
MISE À JOUR 2:
Essayé redéfinissant la méthode OnDataBinding, mais cela ne semble pas faire quoi que ce soit.
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