begin process at 2008 05 16 04:39:40
1 173 215 membres
57 nouveaux aujourd'hui
13 970 membres club

Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum.
Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

CRAWLABLELINKBUTTON : UPDATEPANEL ET RÉFÉRENCEMENT


Information sur la source



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.
Pour les "Membres Club", vous pouvez télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip

    Aucun commentaire pour le moment.

Ajouter un commentaire

Appels d'offres

Pub



CalendriCode

Mai 2008
LMMJVSD
   1234
567891011
12131415161718
19202122232425
262728293031 

Boutique

Boutique de goodies CodeS-SourceS