Problème avec un Listbox utilsant une WebMethod
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:
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 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>
<span><asp:Button ID="btnEditGroup" runat="server" Text="Edit" Width="45px" /><span>
<span><asp:Button ID="btnDeleteGroup" runat="server" Text="Delete" Width="45px"/></span>
<%--<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>
</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());
} |
Problème avec un Listbox utilsant une WebMethod
Je n'ai aucun problème coté cache et j'utilise le server localhost Cassini.