none
les literal control c# aspx et liens. RRS feed

  • Question

  • Salut Messieurs

    Voila J'utilise ce bout de code pour loader les fichiers d'un repertoire en liens dans ma page

    <% 
    DirectoryInfo di;
    di = new DirectoryInfo(Server.MapPath("Admin/Data/"));
    FileInfo[] rgFiles = di.GetFiles("*.inC");
    foreach (FileInfo fi in rgFiles)
    {
    Response.Write("<br><a href=Admin\\Data\\" + fi.Name + ">" + fi.Name + "</a>"); 
    } 
    %> 

    Jusqu'ici ca va, mais pour lire le fichier La est mon probleme.


    je veut pouvoir voir les fichier en question dans mon literal control que je donne l'ID="ltCView"

    je fais comment . 

    parce que Target ne fonctionne pas et le fichier s'ouvre dans une autre page.

    kkum a une idee pour moi

     

    MERCI! 


    BigDan
    mardi 15 juin 2010 20:58

Réponses

  • Avec la solution que je suggère, le principe serait (je remplace les fichiers par un dictionnaire pour avoir une solution directement testable après un simple copier/coller) :

    <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server">
      <title></title>
    </head>
    <body>
      <form id="form1" runat="server">
      <div>
      <%
        System.Collections.Generic.Dictionary<String, String> Files;
        Files = new System.Collections.Generic.Dictionary<String, String>();
        Files.Add("A","Contenu du fichier A");
        Files.Add("B","Contenu du fichier B");
        if (Request.QueryString["file"] != null) content.Text = Files[Request.QueryString["file"]];
       %>
       <asp:Literal ID="content" runat="server" Text="Merci de sélectionner un fichier ci-dessous" /><hr />
      <%
        foreach (var file in Files)
        {
          Response.Write("<a href=\"?file=" + file.Key + "\">"+file.Key +"</a><br>");
        }
      %>
      </div>
      </form>
    </body>
    </html>
    

     Pour AJAX, le plus simple pour débuter serait d'utiliser un UpdatePanel :
    http://msdn.microsoft.com/fr-fr/library/Bb386454(v=VS.90).aspx

    Le fond du problème est qu'un lien href ne permet pas d'afficher directement qq chose à l'intérieur d'un élément HTML présent sur la page.

     

    • Marqué comme réponse DanielMorais jeudi 17 juin 2010 16:57
    jeudi 17 juin 2010 15:12
    Modérateur

Toutes les réponses

  • Bonjour,

    Pour charger le contenu d'une fichier dans un Literal il faut faire :

    monLiteral.Text = File.ReadAllText("<Votre fichier>");

    Cordialement


    Gilles TOURREAU - MVP C# - MCTS Windows Forms - Architecte .NET/Consultant/Formateur - http://gilles.tourreau.fr
    mercredi 16 juin 2010 06:52
    Modérateur
  • Merci pour la réponse

    Mais cela je savait déja

    On a peut etre pas compris ma question

    Si je veut charger un des fichiers  de ma liste a partir du liens telques dans mon examples de code si-haut

    en faite le code d'en haut me sert a creer un liste des fichier et creer des liens pour chaques fichier du repertoire

    Mon probleme est de charger le fichier dont j'aurait cliquer sur le lien,  dans le literal.  

    Pour lire le dernier fichier de ma liste dont le dernier creer je me sert de ceci

     

     

    <div id="c1" style="color: #686868; font-size: medium; padding: 5px; display: block;">
    <% 
    DirectoryInfo di; 
    di = new DirectoryInfo(Server.MapPath("Admin/Data/"));
    FileInfo[] rgFiles = di.GetFiles("*.inC");
    foreach (FileInfo fi in rgFiles)
    {
    StreamReader streamReader = new StreamReader(di+fi.Name);
    string text = streamReader.ReadToEnd();
    streamReader.Close();
    LtCView.Text = text; 
    } 
    %> 
    <asp:Literal ID="LtCView" Mode="PassThrough" EnableViewState="true" Text=""
    runat="server"></asp:Literal>
    <br />
    </div> 

     

     

     Merci


    BigDan
    mercredi 16 juin 2010 15:00
  • Bonjour,

    Si je comprends bien, le problème est donc de savoir quel est le fichier concerné ?

    Il serait possible de générer un lien vers la page qui contient ce litéral et de passer le nom du fichier en QueryString. Lorsqu'on clique sur le lien, la page contenant le literal va s'afficher et elle pourra examiner Request.QueryString pour récupérer le nom du fichier concerné.

    Attention, cela ouvre un trou de sécurité. Donc de préférence bien valider que le fichier est bien à l'emplacement attendu, a bien une extension .inc etc... avant de le traiter.

    Voir par exemple :
    http://social.msdn.microsoft.com/Forums/fr-FR/aspnetfr/thread/98721455-266d-4170-ad1d-608b3e7a6244

    mercredi 16 juin 2010 17:44
    Modérateur
  • Bonjours

    Non en faite le fichier est choisis par le lien donc en cliquand sur ce lien le texte contenue dans le fichier safiche dans le literal qui est dans la meme page

    l'affichage dun fichier specific se fait deja, mais mon probleme est le lien au fichier.

    ne se lit que dans un autre page et non dans le control web literal de la page

    je ne veut pas etre oblige d'afficher le texte dans une autre page.

    Cela ne fait que ralentir la page web a son ouverture et ca se complique a la securité

    Merci a plus

       


    BigDan
    mercredi 16 juin 2010 18:43
  • Bonjours

    Non en faite le fichier est choisis par le lien donc en cliquand sur ce lien le texte contenue dans le fichier safiche dans le literal qui est dans la meme page

    l'affichage dun fichier specific se fait deja, mais mon probleme est le lien au fichier.

    ne se lit que dans un autre page et non dans le control web literal de la page

    je ne veut pas etre oblige d'afficher le texte dans une autre page.

    Cela ne fait que ralentir la page web a son ouverture et ca se complique a la securité

    Merci a plus

       


    BigDan


       Voila j'ai fait un petit bout de code qui represente ce que j'utilise si sa peut vous aider a comprendre ce que je veut

     

    <%@ Page Language="C#" %>
    <%@ Import Namespace="System.IO" %>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server">
    <title>Page sans titre</title>
    </head>
    <body>
    <form id="form1" runat="server">
    <div id="c1" style="color: #686868; font-size: medium; padding: 5px; display: block;">
    <h3>Code de la semaine</h3>
    <% 
    DirectoryInfo di; 
    di = new DirectoryInfo(Server.MapPath("Data\\"));
    FileInfo[] rgFiles = di.GetFiles("*.inC");
    foreach (FileInfo fi in rgFiles)
    {
    StreamReader streamReader = new StreamReader(di+fi.Name);
    string text = streamReader.ReadToEnd();
    streamReader.Close();
    LtView.Text = text; 
    } 
    %> 
    <asp:Literal ID="LtView" Mode="PassThrough" EnableViewState="true" Text=""
    runat="server"></asp:Literal>
    <br /> 
    <% 
    di = new DirectoryInfo(Server.MapPath("Data\\"));
    rgFiles = di.GetFiles("*.inC");
    foreach (FileInfo fi in rgFiles)
    {
    Response.Write("<br><a href=Data/" + fi.Name + ">" + fi.Name + "</a>");
    }
    %>
    </div> 
    </form>
    </body>
    </html>

     

    A plus


    BigDan
    mercredi 16 juin 2010 19:45
  • Non en faite le fichier est choisis par le lien donc en cliquand sur ce lien le texte contenue dans le fichier safiche dans le literal qui est dans la meme page l'affichage dun fichier specific se fait deja, mais mon probleme est le lien au fichier. ne se lit que dans un autre page et non dans le control web literal de la page je ne veut pas etre oblige d'afficher le texte dans une autre page.

    J'ai bien compris mais un lien href ouvre un fichier dans une fenêtre ce qui laisse donc :
    - l'option déjà indiquée (revenir sur le serveur pour utiliser le contenu du fichier voulu dans le literal). Cela peut-être la même page
    - soit utiliser un iframe qui permet de créer une fenêtre "en ligne" dans une page HTML. Modifier sa propriété src fera pointer le contenu vers le fichier voulu
    - soit utiliser AJAX pour éviter de rafraichir la totalité de la page
    - soit transférer le contenu de tous les fichiers dans la page et montrer le contenu voulu en fonction du lien cliqué
    - et sans doute d'autre...

     

     

     

    jeudi 17 juin 2010 08:20
    Modérateur
  • Bonjours

    Ooops! La, je suis perdu!

     

    Existe il des liens vers des expliquation

    des examples avec ajax

    Merci


    BigDan
    jeudi 17 juin 2010 14:00
  • Avec la solution que je suggère, le principe serait (je remplace les fichiers par un dictionnaire pour avoir une solution directement testable après un simple copier/coller) :

    <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server">
      <title></title>
    </head>
    <body>
      <form id="form1" runat="server">
      <div>
      <%
        System.Collections.Generic.Dictionary<String, String> Files;
        Files = new System.Collections.Generic.Dictionary<String, String>();
        Files.Add("A","Contenu du fichier A");
        Files.Add("B","Contenu du fichier B");
        if (Request.QueryString["file"] != null) content.Text = Files[Request.QueryString["file"]];
       %>
       <asp:Literal ID="content" runat="server" Text="Merci de sélectionner un fichier ci-dessous" /><hr />
      <%
        foreach (var file in Files)
        {
          Response.Write("<a href=\"?file=" + file.Key + "\">"+file.Key +"</a><br>");
        }
      %>
      </div>
      </form>
    </body>
    </html>
    

     Pour AJAX, le plus simple pour débuter serait d'utiliser un UpdatePanel :
    http://msdn.microsoft.com/fr-fr/library/Bb386454(v=VS.90).aspx

    Le fond du problème est qu'un lien href ne permet pas d'afficher directement qq chose à l'intérieur d'un élément HTML présent sur la page.

     

    • Marqué comme réponse DanielMorais jeudi 17 juin 2010 16:57
    jeudi 17 juin 2010 15:12
    Modérateur
  • Un gros Merci

    je reguarde ca avec beaucoup de curiositées

     

    A plus


    BigDan
    jeudi 17 juin 2010 16:57