Asp.net - custom web control renvoyant le contenu d'un fichier de type texte

Soyez le premier à donner votre avis sur cette source.

Snippet vu 13 409 fois - Téléchargée 34 fois

Contenu du snippet

Dans le même esprit que la source précédente :
- http://www.aspfr.com/code.aspx?ID=25174

Voila un exemple de Custom Web Control permettant de renvoyer dans votre page ASPX (ou User Control ASCX) le contenu d'un fichier Texte sans aucune transformation.
Je l'utilise pour intégrer des page HTML dans un site ASP.NET sans les modifier.

Source / Exemple :


'**********************************************************************************
' $Archive: $ 
' $Author:  $ 
' $Date: $  $Revision: $
'  Description : CustomWebControl permettant de renvoyer le flux d'un fichier HTML 
'       ou autre
' *********************************************************************************

Imports System.ComponentModel
Imports System.Web.UI
Imports System.IO

''' -----------------------------------------------------------------------------
''' Project   : DotNetSysInfo
''' Class   : HTMLExtractCustomControl
''' 
''' -----------------------------------------------------------------------------
''' <summary>
''' CustomWebControl permettant de renvoyer le flux d'un fichier HTML ou autre
''' </summary>
''' <remarks>
''' </remarks>
''' <history>
'''   [moi]  04/08/2004  Created
''' </history>
''' -----------------------------------------------------------------------------
<DefaultProperty("Text"), ToolboxData("<{0}:HTMLExtractCustomControl runat=server></{0}:HTMLExtractCustomControl>")> Public Class HTMLExtractCustomControl
    Inherits System.Web.UI.WebControls.WebControl

    Dim _FileName As String = ""
    Dim _FilePath As String = ""

#Region "Liste des Propriétés"

    ''' -----------------------------------------------------------------------------
    ''' <summary>
    ''' Nom Complêt du fichier à renvoyer
    ''' </summary>
    ''' <returns></returns>
    ''' <remarks>
    ''' </remarks>
    ''' <history>
    ''' 	[ROMELAFA]	06/08/2004	Created
    ''' </history>
    ''' -----------------------------------------------------------------------------
    <Bindable(True), Category("Appearance"), DefaultValue("")> Property [FileName]() As String
        Get
            Return _FileName
        End Get

        Set(ByVal Value As String)
            _FileName = Value
        End Set
    End Property

    ''' -----------------------------------------------------------------------------
    ''' <summary>
    ''' Sous-Répertoire IIS ou se trouve le fichier
    ''' </summary>
    ''' <returns></returns>
    ''' <remarks>
    ''' </remarks>
    ''' <history>
    ''' 	[ROMELAFA]	06/08/2004	Created
    ''' </history>
    ''' -----------------------------------------------------------------------------
    <Bindable(True), Category("Appearance"), DefaultValue("")> Property [FilePath]() As String
        Get
            Return _FilePath
        End Get

        Set(ByVal Value As String)
            _FilePath = Value
        End Set
    End Property

#End Region

    ''' -----------------------------------------------------------------------------
    ''' <summary>
    ''' Sortie envoyée par le WebControl lors de son placement dans la page
    ''' </summary>
    ''' <param name="output"></param>
    ''' <remarks>
    ''' </remarks>
    ''' <history>
    ''' 	[ROMELAFA]	06/08/2004	Created
    ''' </history>
    ''' -----------------------------------------------------------------------------
    Protected Overrides Sub Render(ByVal output As System.Web.UI.HtmlTextWriter)

        Dim Temp As New System.Text.StringBuilder
        'Chemin d'accès de la page à insérer
        Dim CheminComplet As String = HttpContext.Current.Server.MapPath(HttpContext.Current.Request.ApplicationPath) & [FilePath] & [FileName]

        'On lit la page 
        Dim objReader As New StreamReader(CheminComplet)
        Dim sLine As String = ""
        Dim arrText As New ArrayList

        Do
            sLine = objReader.ReadLine()
            If Not sLine Is Nothing Then
                arrText.Add(sLine)
            End If
        Loop Until sLine Is Nothing
        objReader.Close()

        For Each sLine In arrText
            Temp.Append(Trim(sLine))
        Next

        output.Write(Temp.ToString)

    End Sub

    ' -----------------------------------------------------
End Class

' -------------------- UTILISATION DU CONTROL --------------------------
' Directement dans la page ASPX :

...
<%@ Register TagPrefix="cc1" Namespace="DotNetSysInfo" Assembly="DotNetSysInfo" %>
<cc1:HTMLExtractCustomControl id="HTMLExtractCustomControl1" runat="server" FileName="VotreFichier.html"
	FilePath="./LeSousRepertoireHTML/"></cc1:HTMLExtractCustomControl>
...

' -------------------------------------------------------------------

Conclusion :


Bon coding

Romelard Fabrice (Alias F___).

A voir également

Ajouter un commentaire

Commentaires

Messages postés
32
Date d'inscription
jeudi 31 janvier 2002
Statut
Membre
Dernière intervention
22 février 2005

Bonjour,

Personellement j'aurai utilisé "output.WriteFile(...)".
Si le document à sortir n'est pas à manupuler (ou à contrôler) en mémoire, je pense que c'est plus simple.

A+
Messages postés
1765
Date d'inscription
jeudi 12 octobre 2000
Statut
Modérateur
Dernière intervention
11 décembre 2013
4
Ca j'avais vu ;:) pour le bindable mais n'ayant pas compris non plus la signification je ne l'ai pas signalé.
Pour le DefaultValue, j'ai testé mais ca n'a pas fonctionné donc je ne sais pas quoi en penser.

Perso je ne m'en sers pas et laisse les valeurs par défaut (ca fonctionne bien). :)

F___
Messages postés
6814
Date d'inscription
dimanche 15 décembre 2002
Statut
Modérateur
Dernière intervention
13 octobre 2010
25
les attributs sont des métadonnés : http://blogs.developpeur.org/richardc/archive/2004/03/02/744.aspx

ils servent aussi beaucoup à visual Studio.net L'attribut Category("") sert à classer la propriété lorsqu'on est en mode design dans Visual Studio, et DefaultValue la valeur par defaut :D
par contre l'attribut bindable est un peu plus complexe, il marque une propriété comme étant appropriée pour une liaison de données (MSDN)
je comprend pas ce qu'ils veulent dire par la.
--> http://msdn.microsoft.com/library/fre/default.asp?url=/library/FRE/cpref/html/frlrfSystemComponentModelBindableAttributeClassTopic.asp
Messages postés
1765
Date d'inscription
jeudi 12 octobre 2000
Statut
Modérateur
Dernière intervention
11 décembre 2013
4
DotnetSysInfo est une solution en cours de dev que j'ai déja posté ici.
La classe peut être ajoutée dans n'importe qu'elle projet .net donc le namespace n'est pas du tout nécessaire.
La gestion d'erreur, je l'ai oublié car développé ca en 5 minutes pour un besoin précis.

Mais c'est une bonne remarque.

Pour les propriétés qui sont entre <>, Je n'ai pas trouvé d'info la dessus et ce sont les valeurs par défaut que je laisse.
La seule chose que j'ai trouvé :
- http://www.informit.com/articles/article.asp?p=170718&seqNum=4

F___
Messages postés
6814
Date d'inscription
dimanche 15 décembre 2002
Statut
Modérateur
Dernière intervention
13 octobre 2010
25
Pas de gestion d'erreur, et si le fichier n'existe pas ?

Protected Overrides Sub Render(ByVal output As System.Web.UI.HtmlTextWriter)

Dim Temp As New System.Text.StringBuilder
'Chemin d'accès de la page à insérer
Dim CheminComplet As String = HttpContext.Current.Server.MapPath(HttpContext.Current.Request.ApplicationPath) & [FilePath] & [FileName]

try
'On lit la page
Dim objReader As New StreamReader(CheminComplet)
try
Dim sLine As String = ""
Dim arrText As New ArrayList

Do
sLine = objReader.ReadLine()
If Not sLine Is Nothing Then
arrText.Add(sLine)
End If
Loop Until sLine Is Nothing

Catch ex as Exception

'Erreur
objReader.Close()

Finally
objReader.Close()

End Try

Catch ex as FileNotFoundException
' fichier non trouvé

End Try

For Each sLine In arrText
Temp.Append(Trim(sLine))
Next

output.Write(Temp.ToString)

End Sub

et je suppose que si tu veux que ca fonctionne il faut entourer ta classe du Namespace DotNetSysInfo sauf si ce namespace est definit comme à la base dans Visual Studio.net

Mais cet autre exemple nous permet de bien comprendre les Custom Web Control :)

Il faudrait peut etre expliqué les attributs :

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.