2

Nous essayons de prendre le HTML à partir d'un GridView et le stocker dans une chaîne de sorte que cette chaîne puisse être utilisée comme un corps d'un e-mail.Conversion de HTML GridView ASP.Net en une chaîne

Jusqu'à présent, nous avons utilisé ce codage dans le code-behind:

Protected Sub EmailStudentList() 

    ' Get the rendered HTML. 
    '----------------------- 
    Dim SB As New StringBuilder() 
    Dim SW As New StringWriter(SB) 
    Dim htmlTW As New HtmlTextWriter(SW) 

    GridViewSummary.RenderControl(htmlTW) 

    ' Get the HTML into a string. 
    ' This will be used in the body of the email report. 
    '--------------------------------------------------- 
    Dim dataGridHTML As String = SB.ToString() 

    MsgBox(Server.HtmlEncode(dataGridHTML)) 
End Sub 

Lorsque l'application est en cours d'exécution cette erreur est affiché:

Control 'BodyPlaceholder_GridViewSummary' of type 'GridView' must be placed 
inside a form tag with runat=server. 

donc je placé une balise de formulaire à cet endroit dans le balisage:

<asp:Content 
    ID="ContentBody" 
    ContentPlaceHolderID="BodyPlaceholder" 
    runat="server"> 

<form runat="server"> 

maintenant, nous obtenons cette erreur:

A page can have only one server-side Form tag. 

Il n'existe aucune autre balise de forme nulle part ailleurs dans le balisage.

C'est le balisage pour le GridView:

<asp:GridView 
    ID="GridViewSummary" 
    runat="server" 
    AllowPaging="True" 
    AllowSorting="True" 
    AutoGenerateColumns="False"> 

    <Columns> 
     <asp:BoundField DataField="Surname" HeaderText="Last Name" SortExpression="Surname" /> 
     <asp:BoundField DataField="Forename" HeaderText="First Name" SortExpression="Forename" /> 
     <asp:BoundField DataField="ParentName" HeaderText="Parents" SortExpression="ParentName" /> 
    </Columns> 

</asp:GridView>  
+0

Utilisez-vous une page maître? – mcalex

+0

Oui, nous le faisons. –

+0

Vous trouverez probablement votre contrôle de formulaire manquant dans la page maître. Peut-être qu'il manque l'attribut 'runat =" server "' – mcalex

Répondre

5

Ajouter les sous dans votre page et essayez à nouveau:

Public Overrides Sub VerifyRenderingInServerForm(control As Control) 
    Return 
End Sub 

Edit:

Pour désactiver la validation d'événement, ajoutez EnableEventValidation = "False" dans la directive de votre page aspx. Par exemple

<%@ Page EnableEventValidation="False" %> 
+0

Merci Vano pour le codage. Après l'avoir ajouté, cette erreur est maintenant affichée: RegisterForEventValidation ne peut être appelée que pendant Render(); Comment je fais ça? –

+0

Voir ma réponse éditée. –

+0

Merci Vano. Je l'ai mis et ça a parfaitement fonctionné. :-) –