begin process at 2010 03 22 16:03:06
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

ASP.Net

 > CRAWLABLELINKBUTTON : UPDATEPANEL ET RÉFÉRENCEMENT

CRAWLABLELINKBUTTON : UPDATEPANEL ET RÉFÉRENCEMENT




 Description

L'utilisation des UpdatePanels peut avoir des impacts non négligeable sur le référencement des moteurs de recherche.


Ce contrôle permet de remedier à ce problème. Le CrawlableLinkButton hérite de LinkButton et lui rajoute la propriété NavigateUrl. Son rendu sera alors le suivant :

<a href="navigateurl" onclick="void(__doPostBack(...));return false">...

Ainsi, lorsqu'un utilisateur riche cliquera sur le lien, il fera un postback comme un classique LinkButton, par contre les robots iront référencer la page NavigateUrl. Il vous faudra donc gérer 2 cas : le cas du postback et le cas du classique lien.


Ci-dessous : un exemple d'utilisation de ce contrôle.

Source

  • <%@ Page Language="C#" MasterPageFile="~/Master/MasterPage.master" AutoEventWireup="true"
  • CodeFile="temp.aspx.cs" Inherits="temp" Title="Untitled Page" %>
  • <script type="text/C#" runat="server">
  • void Page_Load(Object sender, EventArgs e)
  • {
  • if (!Page.IsPostBack)
  • {
  • BindData();
  • }
  • }
  • private System.Diagnostics.Process _currentProcess;
  • public System.Diagnostics.Process CurrentProcess {
  • get {
  • if (_currentProcess == null) {
  • int pid = -1;
  • if (Page.IsPostBack) {
  • if (ViewState["PID"] != null) {
  • pid = (int)ViewState["PID"];
  • }
  • } else {
  • int.TryParse(Request.QueryString["PID"], out pid);
  • }
  • if (pid > -1) {
  • _currentProcess = Processes.Find(delegate(
  • System.Diagnostics.Process process){
  • return process.Id == pid;
  • });
  • } else {
  • _currentProcess = Processes[0];
  • }
  • }
  • return _currentProcess;
  • }
  • set {
  • ViewState["PID"] = value.Id;
  • _currentProcess = value;
  • }
  • }
  • private static List<System.Diagnostics.Process> _processes;
  • public static List<System.Diagnostics.Process> Processes
  • {
  • get
  • {
  • // Ne faites pas ça, c'est pour l'exemple mais attention
  • // c'est pas thread safe ...
  • if (_processes == null)
  • {
  • _processes = new List<System.Diagnostics.Process>(
  • System.Diagnostics.Process.GetProcesses());
  • }
  • return _processes;
  • }
  • }
  • void gvProcess_SelectedIndexChanged(object sender, EventArgs e)
  • {
  • // ca aussi c'est mal, c'est pour simplifier l'exemple
  • CurrentProcess = Processes[gvProcess.SelectedIndex];
  • }
  • void BindData()
  • {
  • gvProcess.DataSource = Processes;
  • gvProcess.DataBind();
  • }
  • </script>
  • <asp:Content ID="Content1" ContentPlaceHolderID="CPH1" runat="Server">
  • <asp:UpdatePanel runat="server" UpdateMode="Conditional" >
  • <ContentTemplate>
  • <%=CurrentProcess.ProcessName %>
  • </ContentTemplate>
  • <Triggers>
  • <asp:AsyncPostBackTrigger ControlID="gvProcess" />
  • </Triggers>
  • </asp:UpdatePanel>
  • <asp:GridView runat="server" ID="gvProcess" AutoGenerateColumns="false"
  • OnSelectedIndexChanged="gvProcess_SelectedIndexChanged">
  • <Columns>
  • <asp:TemplateField>
  • <ItemTemplate>
  • <cs:CrawlableLinkButton runat="server" CommandName="Select"
  • Text="Select" NavigateUrl='<%# "temp.aspx?PID=" + Eval("id").ToString() %>' />
  • </ItemTemplate>
  • </asp:TemplateField>
  • <asp:BoundField DataField="ProcessName" />
  • <asp:BoundField DataField="VirtualMemorySize" />
  • </Columns>
  • </asp:GridView>
  • </asp:Content>
<%@ Page Language="C#" MasterPageFile="~/Master/MasterPage.master" AutoEventWireup="true"
    CodeFile="temp.aspx.cs" Inherits="temp" Title="Untitled Page" %>

<script type="text/C#" runat="server">

    void Page_Load(Object sender, EventArgs e)
    {
        if (!Page.IsPostBack)
        {
            BindData();
        }
    }

    private System.Diagnostics.Process _currentProcess;
    public System.Diagnostics.Process CurrentProcess {
        get {
            if (_currentProcess == null) {
                int pid = -1;
                if (Page.IsPostBack) {
                    if (ViewState["PID"] != null) {
                        pid = (int)ViewState["PID"];
                    }
                } else {
                    int.TryParse(Request.QueryString["PID"], out pid); 
                }
                if (pid > -1) { 
                    _currentProcess = Processes.Find(delegate(
                            System.Diagnostics.Process process){ 
                        return process.Id == pid;
                    });
                } else {
                    _currentProcess = Processes[0]; 
                }
            }
            return _currentProcess;
        }
        set {
            ViewState["PID"] = value.Id; 
            _currentProcess = value; 
        }
    }

    private static List<System.Diagnostics.Process> _processes;
    public static List<System.Diagnostics.Process> Processes
    {
        get
        {
            // Ne faites pas ça, c'est pour l'exemple mais attention 
            // c'est pas thread safe ...
            if (_processes == null)
            {
                _processes = new List<System.Diagnostics.Process>(
                        System.Diagnostics.Process.GetProcesses());
            }
            return _processes;
        }
    }

    void gvProcess_SelectedIndexChanged(object sender, EventArgs e)
    {
        // ca aussi c'est mal, c'est pour simplifier l'exemple
        CurrentProcess = Processes[gvProcess.SelectedIndex];
    }
    
    void BindData()
    {
        gvProcess.DataSource = Processes;
        gvProcess.DataBind();
    }

</script>

<asp:Content ID="Content1" ContentPlaceHolderID="CPH1" runat="Server">
    <asp:UpdatePanel runat="server" UpdateMode="Conditional" >
        <ContentTemplate>
            <%=CurrentProcess.ProcessName %>
        </ContentTemplate>
        <Triggers>
            <asp:AsyncPostBackTrigger ControlID="gvProcess" />
        </Triggers>
    </asp:UpdatePanel>
    <asp:GridView runat="server" ID="gvProcess" AutoGenerateColumns="false" 
        OnSelectedIndexChanged="gvProcess_SelectedIndexChanged">
        <Columns>
            <asp:TemplateField>
                <ItemTemplate>
                    <cs:CrawlableLinkButton runat="server" CommandName="Select" 
                        Text="Select" NavigateUrl='<%# "temp.aspx?PID=" + Eval("id").ToString() %>' />
                </ItemTemplate>
            </asp:TemplateField>
            <asp:BoundField DataField="ProcessName" />
            <asp:BoundField DataField="VirtualMemorySize" />
        </Columns>
    </asp:GridView>
</asp:Content>

 Conclusion

Attention le référencement est un art plus complexe que ça, ce controle permet simplement de rendre référencables les linkbuttons. Il va de soit qu'il faut penser toute l'application pour qu'elle soit référencable et bien réfléchir à comment les robots vont naviguer sur le site.

 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 Sources du même auteur

Source avec Zip Source .NET (Dotnet) UTILISATION DE LA MÉTHODE SORT ET SORTDIRECTION AVEC UN GRID...
Source .NET (Dotnet) RESPONSE.FILTER : MANIPULATION DU STREAM DE SORTIE ASP.NET
Source avec Zip Source .NET (Dotnet) OPTIMISATION DE LA SERIALISATION JSON POUR LES LIST<T>
Source .NET (Dotnet) POSTBACKCONTROL - COMMUNICATION CLIENT/SERVEUR AVEC LES UPDA...
Source avec Zip Source .NET (Dotnet) COMPACTER DU JAVASCRIPT

 Sources de la même categorie

Source avec Zip Source .NET (Dotnet) UTILISATION DE LA MÉTHODE SORT ET SORTDIRECTION AVEC UN GRID... par jesusonline
Source avec Zip Source .NET (Dotnet) CUSTOM DATEPIKER DÉRIVANT DE COMPOSITECONTROL par fredzool
Source avec Zip UN MODULE POUR APPRENDRE SQL par Elmarzougui
Source avec Zip Source .NET (Dotnet) BOUTON QUI EMPECHE LE MULTI CLIC AVANT LA FIN DU TRAITEMENT.... par fredzool
Source avec Zip Source .NET (Dotnet) BOUTON AVEC CSS ET USERCONTROL WITH EVENT par fredzool

 Sources en rapport avec celle ci

Source avec Zip Source .NET (Dotnet) WEBCONTROL DATEPICKER WEBCONTROLLIBRARY par fredzool
Source avec une capture Source .NET (Dotnet) .NET 2.0: CONTRÔLE IMAGE VIEWER / UPLOADER par gldfdp
Source .NET (Dotnet) POSTBACKCONTROL - COMMUNICATION CLIENT/SERVEUR AVEC LES UPDA... par jesusonline
Source avec Zip Source .NET (Dotnet) COMPACTER DU JAVASCRIPT par jesusonline
Source avec Zip Source .NET (Dotnet) WEBCONTROL IMAGE SQL SERVER AVEC DESIGNER par Yxion

Commentaires et avis

Commentaire de dymsbess le 27/03/2009 07:59:16

Bonjour,

Effectivement, c'est solution qui peut dépanner pas mal de monde. Par contre, j'obtiens l'erreur suivante "Balise server inconnue 'cs:CrawlableLinkButton'.". C'est mal implémenté de mon côté ?

@+.

Commentaire de dymsbess le 13/06/2009 17:32:05

Finalement, ce sera un lien en javascript qui tient en une ligne avec de la réécriture d'URL derrière :

<a href="pageXY.html" onclick="javascript:FonctionTest('');return false;">Lien</a>

http://www.xoowiki.com/Category/csharp-7.aspx

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

ASP et le référencement [ par Thibaut ] J'ai une petite question intéressante :lors d'un référencement, est ce que le robot du moteur de recherche analyse ce qu'il y a entre les balises asp? Bug webcontrol treeview [ par karim ] Bonjour a tous !J'utilise VS.Net version Beta 2.je crée une webform dans laquelle j'ajoute un treeview et un bouton(webcontrols). Je ne rajoute aucun Référencement [ par Benz ] Bonjour,Il semble que la question que je vais poser soit déjà sur le forum, mais elle à du se perdre car elle est restée sans réponse. Je me permet do Référencement site Broadvision [ par tchpub ] Bonjour,j'aimerais avoir des conseils et des liens (genre tutoriels) sur la manière de référencer des sites en Broadvision. Le problème vient du fait Collection de webcontrol en asp.net [ par pascalwick ] voila je suis entrain de developper une dll de traduction qui va traduire une page et tous ses webcontrols.je desire donc faire une boucle pour trouve TABSTRIP : je recherche un exemple ou une aide sur ce webcontrol [ par sehn ] help, je débute en ASP.NET . Je n'arrive pas a le configurer graphiquementSeHN User Webcontrol [ par Mia ] Salut tlmVoilà, je voudrais créer un webcontrol que j'utiliserais dans +ieurs pages. QQun connait'il une adresse avec un bon tutorial en français sur KeyPress event in a WebControl.TextBox [ par sdiacal ] Je voudrais gèrer l'event d'appuyer sur une touche du clavier dans un WebControl.TextBox en .NET C#. J'ai vu qu'il y a un event appellé keyPress pour Modifier un WebControl appartenant à un DataList. [ par tofyz ] Bonjour &#224; tous,Je vais essayer d'&#233;claicir mon propos!Je souhaite afficher, par l'interm&#233;diaire d'un DataList une liste dont chaque lign Référencement objet COM Excel [ par arkele ] Bonjour,j'aimerai faire un export de donn&#233;es pr&#233;sentes dans un datagrid vers excel. J'utilise le code suivant : Dim xlapp As Exc


Nos sponsors


Appels d'offres

Sondage...

CalendriCode

Mars 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728
293031    

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,920 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales