IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

ASP.NET Discussion :

Try catch pour un Hyperlien


Sujet :

ASP.NET

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 28
    Par défaut Try catch pour un Hyperlien
    Bonjour,
    je me demandais s'il est possible de pouvoir faire un try catch lors d'un clique d'un hyperlien dans un Gridview au lieu d'un message d'erreur, car l'adresse du lien n'est pas accessible pour certains utilisateurs.

    Voici mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    <asp:GridView ID="ux_ListerFacture" runat="server" AllowPaging="false"
    AllowSorting="true" AutoGenerateColumns="false" CellPadding="3"
    CellSpacing="0" CssClass="BorderStyle" DataSourceID="srcListeFacture"
    EmptyDataText="<%$Resources:Lassonde, NoRecord %>" Width="70%" OnSorting="ux_ListerFacture_Sorting" >
    <HeaderStyle CssClass="Header10n" />
    <RowStyle CssClass="DataText8n1" />
    <AlternatingRowStyle CssClass="DataText8n2" />
    <EmptyDataRowStyle CssClass="Header10n" />
    <Columns>
      <asp:BoundField DataField="NoVenduA" SortExpression="NoVenduA" HtmlEncode="false" HeaderText="<%$Resources:Facture, NoVenduA %>" />
      <asp:BoundField DataField="VenduA" SortExpression="VenduA" HtmlEncode="false" HeaderText="<%$Resources:Facture, VenduA %>" />
      <asp:BoundField DataField="NoCommande" SortExpression="NoCommande" HtmlEncode="false" HeaderText="<%$Resources:Facture, NoCommande %>" />
      <asp:BoundField DataField="NoFacture" SortExpression="NoFacture" 
    HtmlEncode="false" HeaderText="<%$Resources:Facture, NoFacture %>" />
      <asp:BoundField DataField="NoPO" SortExpression="NoPO" HtmlEncode="false"
    HeaderText="<%$Resources:Facture, NoPO %>" />
      <asp:BoundField DataField="Date" SortExpression="Date" HtmlEncode="false"
    HeaderText="<%$Resources:Facture, Date %>" />
      <asp:BoundField DataField="MontantEnDevise" SortExpression="MontantEnDevise" HtmlEncode="false" HeaderText="<%$Resources:Facture, Montant %>" />
    <asp:TemplateField>
      <ItemTemplate>
        <asp:HyperLink runat="server" ID="ux_voirFacture" NavigateUrl='<%# Eval("lien") %>' Target="_blank" Text="" BorderStyle="none" >
          <img alt="PDF_Facture" src="../Images/LogoPDF.jpg" style="border-style: hidden;" /> 
        </asp:HyperLink>
      </ItemTemplate>
    </asp:TemplateField>
    </Columns>
    </asp:GridView>
    <asp:SqlDataSource ID="srcListeFacture" runat="server"></asp:SqlDataSource>
    Merci

  2. #2
    Membre chevronné
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    388
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 388
    Par défaut
    faire un try catch lors d'un clique d'un hyperlien
    Explique ce que tu veux faire plus précisément.

    Si le lien n'est pas accessible pour certains utilisateurs, pourquoi l'afficher a chaque fois? Tu peux ne pas l'afficher si l'utilisateur n'a pas les droits nécessaires.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 28
    Par défaut
    Explique ce que tu veux faire plus précisément.
    Je voudrais remplacer le message d'erreur par un Label que je mettrais Visible.
    Tu peux ne pas l'afficher si l'utilisateur n'a pas les droits nécessaires.
    En effet, mais il n'y a pas de moyen simple de savoir si l'utilisateur a les droits nécessaires, donc un try catch semble la meilleure solution. Le problème est que je ne sais pas s'il y a un moyen de faire un try catch sur le click d'un hyperlien.
    Y aurait t-il un moyen de régler ce problème en utilisant une fonction Javascript sur le clique du lien?

  4. #4
    Expert confirmé

    Avatar de Philippe Vialatte
    Homme Profil pro
    Architecte technique
    Inscrit en
    Juillet 2004
    Messages
    3 029
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juillet 2004
    Messages : 3 029
    Par défaut
    Citation Envoyé par tsmp19 Voir le message
    En effet, mais il n'y a pas de moyen simple de savoir si l'utilisateur a les droits nécessaires, donc un try catch semble la meilleure solution. Le problème est que je ne sais pas s'il y a un moyen de faire un try catch sur le click d'un hyperlien.
    Y aurait t-il un moyen de régler ce problème en utilisant une fonction Javascript sur le clique du lien?
    Donc grosso modo, tu dis que tu veux verifier en javascript si un utilisateur a acces, parce que c'est trop dur de le faire en .net ???

    J'ai un petit doute sur la methode que tu veux utiliser...

    Dans le meilleur des cas, tu derais une requete Ajax en voyant si tu peux arriver a envoyer une info a une page..c'est moche, et ca se fait en asynchrine

    Sinon, tu peux, si vraiment tu n'as pas moyen de savoir si l'autre page est accessible, essayer d'utiliser le HttpWebRequest/HttpWebResponse pour faire un appel a la page en code-behind, et recuperer le statuscode (si 401 ou 404->erreur)

    ...mais meme comme ca, c'est moche

    Mon Blog

    The Cake is still a lie !!!



    Vous voulez contribuer à la rubrique .NET ? Contactez-moi par MP.
    Vous voulez rédiger des articles pour la rubrique .NET ? Voici la procédure à suivre.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 28
    Par défaut
    Premièrement, merci de ta réponse

    Je vais regardé pour cette solution:
    Sinon, tu peux, si vraiment tu n'as pas moyen de savoir si l'autre page est accessible, essayer d'utiliser le HttpWebRequest/HttpWebResponse pour faire un appel a la page en code-behind, et recuperer le statuscode (si 401 ou 404->erreur)
    mais un autre petit problème survient, car il n'y a pas d'événement Click sur un Hyperlink.
    Je me suis p-e mal exprimé, mais c'est un peu pour cela que j'ai parlé de Javascript.
    Y a t-il un moyen de pouvoir excéder à un événement Click sur un Hyperlink ou existe t-il une meilleure solution s'impose?

    Merci

  6. #6
    Expert confirmé

    Avatar de Philippe Vialatte
    Homme Profil pro
    Architecte technique
    Inscrit en
    Juillet 2004
    Messages
    3 029
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juillet 2004
    Messages : 3 029
    Par défaut
    Citation Envoyé par tsmp19 Voir le message
    mais un autre petit problème survient, car il n'y a pas d'événement Click sur un Hyperlink.
    Je me suis p-e mal exprimé, mais c'est un peu pour cela que j'ai parlé de Javascript.
    Ce que je voulais dire, c'est que ce test, tu le fais dans le code-behind de ta page, et que si l'utilisateur n'as pas acces, tu n'affiches pas le lien

    Mon Blog

    The Cake is still a lie !!!



    Vous voulez contribuer à la rubrique .NET ? Contactez-moi par MP.
    Vous voulez rédiger des articles pour la rubrique .NET ? Voici la procédure à suivre.

  7. #7
    Membre chevronné
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    388
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 388
    Par défaut
    tsmp19, tu dois bien avoir des variables (session, methode get, post, etc.) pour pouvoir determiner si l'utilisateur a les droits ou non. Donc il te suffit de vérifier cela pendant le chargement de ta page, dans le même temps tu peux ne pas afficher le lien si l'utilisateur n'a pas les droits.
    En simple ça donnerait.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    chargement()
    {
         si utilisateur n'a pas les droits
               pas d'affichage du lien
    }
    Est-ce que cela correspond à tes attentes ou est-ce que tu veux vraiment afficher ton lien(ce qui ne serai pas bien dur à implémenter non plus)?

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 28
    Par défaut
    J'y suis arrivé en ajoutant l'événement RowDataBound
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    protected void ux_ListerFacture_RowDataBound(object sender, GridViewRowEventArgs e)
    {
        if (e.Row.DataItemIndex != -1)
        {
            GridViewRow gvr = (GridViewRow)e.Row;
            HyperLink link = (HyperLink)gvr.FindControl("ux_voirFacture");
            string url = link.NavigateUrl;
     
            url = "file:" + url.Replace("\\", "/");
     
            try
            {
                ux_ListerFacture.Columns[7].Visible = true;
                Uri fileUrl = new Uri(url);
                FileWebRequest myFileWebRequest = (FileWebRequest)WebRequest.Create(fileUrl);
                FileWebResponse myFileWebResponse = (FileWebResponse)myFileWebRequest.GetResponse();
                myFileWebResponse.Close();
            }
            catch
            {
                ux_ListerFacture.Columns[7].Visible = false;
            }
        }
    }
    Merci!!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 01/06/2015, 17h20
  2. solution pour insérer plusieur throw dans try catch
    Par keokaz dans le forum Langage
    Réponses: 4
    Dernier message: 09/03/2013, 18h39
  3. Réponses: 6
    Dernier message: 07/05/2010, 10h48
  4. Réponses: 4
    Dernier message: 24/10/2007, 12h16
  5. Besoin d'une précision pour try/catch, svp
    Par hallek60 dans le forum C++
    Réponses: 9
    Dernier message: 05/01/2006, 21h15

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo