Bonjour, j’ai un léger problème avec le contrôle Listbox utilisant les Web methods. En fait, je ne sais pas si le problème provient directement des Web methods mais le comportement du Listbox lors du click d’un évènement en javascript me laisse croire que c’est la source problème. Voici, mon problème, j’ai un contrôle Listbox contenu dans un UpdatePanel dans une page ASP (ContentPlaceHolder1). Le contrôle est rempli au Page_load. Le listbox est complété d’un contrôle textbox et de 3 boutons (sauvegarder, effacer et modifier). L’utilisateur peut ainsi insérer une entrée au listbox et l’effacer.
Comme j’utilise les méthodes web, les boutons ont tous un évènement click en javascript, faisant référence à des méthodes coté-serveur. Ces méthodes statiques appellent des méthodes dans une classe externe permettant de mettre à jour des tables d’une BD SQL .
Lorsque j’insère une nouvelle entrée au Listbox et que je fais la sauvegarde tout est impeccable. Si je continue en effaçant la nouvelle entrée tout semble correcte. Mon problème survient après avoir effacé la nouvelle entrée : si je reviens et que je clique sur 1 des 3 boutons l’entrée précédemment effacer réapparait dans la liste. J’ai bien essayé en mettant Autopostback à true mais rien ne change. J’ai aussi essayé en mettant mon remplissage de la liste du Page_load dans le Page_Init de la page mais rien ne fait. Le seul moyen de voir la vrai information est d’appuyer le bouton Actualiser dans Internet Explorer.

Est-ce quelqu'un pourrait me mettre sur une bonne piste?

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
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
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
 
Client-Side
                    <asp:UpdatePanel ID="UpdatePanel2" runat="server">
                        <ContentTemplate>
                            <div class="container">
                                <div id="Groups">
                                    <asp:TextBox ID="txtNewGroup" runat="server"></asp:TextBox>
                                    <asp:Button ID="btnAddGroup" runat="server" Text="add new group" OnClick="btnAddGroup_Click" />
                                    <asp:Label ID="lblGroup" runat="server"></asp:Label>
                                    <asp:RequiredFieldValidator ID="rfValidatorGroup" ControlToValidate="txtNewGroup" Text="*" InitialValue="<Enter new group&nbsp;here>" Display="Dynamic" runat="server" />
                                    <br />
                                    <asp:ListBox ID="lstGroups" runat="server" CssClass="listbox" AutoPostBack="false" EnableViewState="false"></asp:ListBox>
                                    <br />
                                    <div class="buttonSave" >
                                        <span><asp:Button ID="btnSaveGroup" runat="server" Text="Save" Width="45px" OnClick="btnSaveGroup_Click" /><span>&nbsp;
                                        <span><asp:Button ID="btnEditGroup" runat="server" Text="Edit" Width="45px" /><span>&nbsp;
                                        <span><asp:Button ID="btnDeleteGroup" runat="server" Text="Delete" Width="45px"/></span>&nbsp;
                                        <%--<asp:RequiredFieldValidator runat="server" ID="rfGroupSelect" ControlToValidate="lstGroups" Display="Dynamic" ErrorMessage="Please choose at least one group" /> --%>
                                    </div>
                                    <span><asp:Label ID="lblGroupSaved" runat="server"></asp:Label></span>
                                    &nbsp;
                                </div>
                            </div>
                        </ContentTemplate>
                    </asp:UpdatePanel>
 
Code-Behind
public partial class Admin : System.Web.UI.Page
{
    private void Page_Init(object sender, System.EventArgs e)
    {
        FillListbox(lstGroups);
    }
 
    public void FillListbox(ListBox lstGroup)
    {
        try
        {
            Fields desGroups = new Fields();
 
            lstGroup.Items.Clear();
            lstGroup.DataSource = desGroups.GetGroups();
            lstGroup.DataBind();
 
        }
        catch (Exception ex)
        {
            throw ex;
        }
    }
    [System.Web.Services.WebMethod]
    [System.Web.Script.Services.ScriptMethod()]
    public static bool GroupSelected()
    {
        try
        {
            return true;
        }
        catch (Exception Ex)
        {
            throw Ex;
        }
    }
    [System.Web.Services.WebMethod()]
    public static bool DeleteGroup(string aGroup)
    {
        Fields Group = new Fields();
        Group.DeleteGroup(aGroup);
        return true;
    }
}
 
 
Javascript
 
function btnDeleteGroup_Click()
{
    PageMethods.GroupSelected(GroupSelected_Success, GroupSelected_Failure);
}
 
function GroupSelected_Success(result)
{
    if (result)
    {
        var answer = (confirm("Are you sure you want to delete this information?"))
        if (answer)
        {
            var ind = $get("ctl00_ContentPlaceHolder1_TabContainer_TabField_lstGroups").selectedIndex;
            var GroupSelected = $get("ctl00_ContentPlaceHolder1_TabContainer_TabField_lstGroups").options[ind].value;
            var lstGroups = $get("ctl00_ContentPlaceHolder1_TabContainer_TabField_lstGroups");
 
            lstGroups.remove(lstGroups.options.selectedIndex);
            PageMethods.DeleteGroup(GroupSelected, Items_Success, Items_Failure);
         }
         else
         {
           alert("Operation canceled.");
         }
    }
    else 
        alert("An error occurred.");
}
 
function GroupSelected_Failure(error)
{
    if (error)
        alert(error.get_message());
}
 
function Items_Success(result)
{
    if (result)
    {
        alert("Your operation has been completed.");
    }
    else 
        alert("An error occurred.");
}
 
function Items_Failure(error)
{
    if (error)
        alert(error.get_message());
}