Bonjour,

J'ai un formulaire de recherche en ASP.Net. Classique, on rempli des champs, on valide, ca lance une requete et on affiche le resultat.
Tout se passe bien avec FF et Chrome mais sur IE, valider en cliquant "recharge" la page (je vois bien le scintillement du postback) mais les champ sont réinitialisés et la recherche n'est pas lancée. On se retrouve avec la page à vide, comme si elle se chargeait pour la première fois.

Si je lance Fiddler pour voir ce qui se passe, le formulaire fonctionne. Je suppose que Fiddler réécrit la requête HTTP envoyée au serveur et la corrige au passage.
Si je lance mon appli en pas à pas, ça marche. Si bien que je ne trouve pas de moyen de constater l'origine du bug.

fishier aspx :
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
30
31
32
33
34
35
36
37
38
39
40
41
42
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="~/xml/Dialog/rechercher.aspx.cs" Inherits="xml_Dialog_rechercher" %>
 
<!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>Recherche</title>
    <link rel="stylesheet" href="css/screen.css" />
    <script type="text/javascript" src="js/dialog.js"></script>
    <!-- other js calls -->
</head>
<body style="background-image:url('/lib_central/images/ACTIV/common/bgd_main.gif');background-repeat:repeat-y;">
 
    <form runat="server">
 
        <!--
            ...
        -->
 
        <!-- Exemple de champ de recherche : le champ Texte -->
        <label for="motsClefs" class="bold"><% Response.Write(get_label("motcle")); %></label><br />
        <asp:TextBox ID="rech_kw" runat="server" value="" ForeColor="#999999" Width="250"></asp:TextBox>
 
        <!-- Le bouton de validation -->
        <asp:LinkButton ID="rech_valide" OnClick="lancer_recherche" runat="server" CssClass="boutons rechercher inlineBlk" >
        <span class="rechercher"><span class="alt_text">rechercher</span></span></asp:LinkButton>
        <br class="clear" />
 
        <%-- Affichage des resultats --%>
        <div ID="resultats" class="contentDia alignementBlk" runat="server"></div>
 
 
        <!--
            ...
        -->
 
        <!-- Dire à la fenetre parent de changer de taille en fonction des resultats -->
        <script type="text/javascript">
            $('#iframe_666', window.parent.document).height(100+$(".contentDialogue").height());
        </script>
    </form>
</body>
</html>


Code behind :
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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
public partial class xml_Dialog_rechercher : System.Web.UI.Page
{
    string keyword = ""; // Champ de saisie texte
    List<DLG_Questions> list_q;
    public string lang;
 
 
    // Au chargement de la page
    protected void Page_Load(object sender, EventArgs e)
    {
 
    }
 
 
    // A la validation du formulaire
    protected void lancer_recherche(object sender, EventArgs e)
    {
        // Si un champ de recherche contient quelque chose
        if (get_filters())
        {
            // Requeter la couche données pour extraire l'info
            this.list_q = DialogManager.recherche(this.keyword);
 
            // Afficher les resultats
            if (this.list_q.Count == 0)
            {
                resultats.InnerHtml = "no results";
            }
            else
            {
                resultats.InnerHtml = display_question_list();
            }
        }
    }
 
 
 
    // "Lit" les champs du formulaire
    // si tous sont vides => return FALSE
    // si au moins un contient une info => enregistrer l'info et return TRUE
    protected bool get_filters()
    {
        // ...
 
        return ret;
    }
 
 
    // Retourne un HTML de la liste des resultats de recherche
    public string display_question_list(){
        // ...
    }
 
 
    // Internationnalisation
    protected string get_label(String cle)
    {
        // ...
    }
}
Je sens vaguement que ca cloche dans la discussion entre client et serveur autour du mécanisme de postback ou de viewstate mais je ne tiens rien de précis.
D'ailleurs autre symptôme : Sur FF le viewState au chargement fait environ 8 lignes dans firebug, après une recherche il passe à 12 lignes. Dans IE, le viewstate ne fait qu'une ligne au chargement et reste identique après avoir cliqué pour lancer une recherche.
J'ai essayé d'ajouter des "enableViewState=true" sur mes contrôles (en plus de l'avoir directement sur la page), j'ai essayé d'ajouter un "causesValidation" sur mon bouton, mais en vain.