AutoPostBack ne veux pas fonctionner avec mon DropDownList
Bonjour,
Je fais face à un problème que je n'arrive pas à comprendre.
Si je crée une page "Text.aspx" avec dedans :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
|
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Test.aspx.cs" Inherits="Test" %>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<title></title>
</head>
<body>
<form id="form1" runat="server">
List 1 : <asp:DropDownList ID="List1" runat="server" AutoPostBack="true" OnSelectedIndexChanged="List1_SelectedIndexChanged" /><br />
List 2 : <asp:DropDownList ID="List2" runat="server" AutoPostBack="true" /><br />
</form>
</body>
</html> |
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
|
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
public partial class Test : Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
List1.Items.Add("");
List1.Items.Add(new ListItem("Element 1", "1"));
List1.Items.Add(new ListItem("Element 2", "2"));
List1.Items.Add(new ListItem("Element 3", "3"));
List1.Items.Add(new ListItem("Element 4", "4"));
}
}
protected void List1_SelectedIndexChanged(object sender, EventArgs e)
{
List2.Items.Clear();
switch (List1.SelectedValue)
{
case "1":
List2.Items.Add(new ListItem("Element 1.1", "1.1"));
List2.Items.Add(new ListItem("Element 1.2", "1.2"));
break;
case "2":
List2.Items.Add(new ListItem("Element 2.1", "2.1"));
List2.Items.Add(new ListItem("Element 2.2", "2.2"));
List2.Items.Add(new ListItem("Element 2.3", "2.3"));
List2.Items.Add(new ListItem("Element 2.4", "2.4"));
break;
case "3":
List2.Items.Add(new ListItem("Element 3.1", "3.1"));
break;
case "4":
break;
default:
List2.Items.Add("Choisissez Liste 1");
break;
}
}
} |
Lorsque je sélectionne un élément dans la première liste, tout va bien, la page de recharge avec la seconde liste peuplée.
Maintenant, j'ai une MasterPage :
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
|
<%@ Master Language="C#" AutoEventWireup="true" CodeFile="MasterPage.master.cs" Inherits="Masters_MasterPage" %>
<!DOCTYPE html>
<html>
<head runat="server">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<title>Plannis</title>
<link href="~/styles/main.css" rel="stylesheet" type="text/css" />
<link href="~/styles/topmenu.css" rel="stylesheet" type="text/css" />
<link href="~/styles/mainmenu.css" rel="stylesheet" type="text/css" />
<script type="text/javascript" src="<%= Page.ResolveClientUrl("~/JavaScripts/common.js") %>"></script>
<script type="text/javascript" src="<%= Page.ResolveClientUrl("~/JavaScripts/calendar.js") %>"></script>
<script type="text/javascript" src="<%= Page.ResolveClientUrl("~/JavaScripts/datetimeselector.js") %>"></script>
<asp:ContentPlaceHolder id="Head" runat="server">
</asp:ContentPlaceHolder>
</head>
<body>
<form id="form1" runat="server">
<menu:MainMenu ID="MainMenu1" runat="server" />
<menu:TopMenu ID="TopMenu1" runat="server" />
<div id="maincontainer">
<asp:ContentPlaceHolder id="PageContainer" runat="server" />
</div>
</form>
</body>
</html> |
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
|
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
public partial class Masters_MasterPage : System.Web.UI.MasterPage
{
protected void Page_Load(object sender, EventArgs e)
{
}
} |
Ainsi qu'une classe de base pour gérer aisément un contexte applicatif :
PlannisPage.cs
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
|
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Web;
using System.Web.UI;
/// <summary>
/// Description résumée de PlannisPage
/// </summary>
public abstract class PlannisPage : Page
{
public PlannisContext PlannisContext = null;
protected abstract bool MustAuthenticated();
protected override void OnPreInit(EventArgs e)
{
base.OnPreInit(e);
PlannisContext = new PlannisContext();
if (PlannisContext.LoginUser == null && MustAuthenticated())
{
Logger.Instance.LogMessage("PlannisPage", Logger.ErrorLevel.Error, $"Tentative d'accès à la page {Page.Title} sans être loggé !");
Response.Redirect("~/Connection/Login.aspx");
return;
}
}
} |
Et donc ma page de test est modifiée en conséquence :
Test.aspx :
Code:
1 2 3 4 5 6 7 8 9 10
|
<%@ Page Title="Plannis - Mes tickets" Language="C#" MasterPageFile="~/Masters/MasterPage.master" AutoEventWireup="true" CodeFile="Test.aspx.cs" Inherits="Test" %>
<asp:Content ID="Content1" ContentPlaceHolderID="Head" Runat="Server">
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="PageContainer" Runat="Server">
<div class="tuile large">
List 1 : <asp:DropDownList ID="List1" runat="server" AutoPostBack="true" OnSelectedIndexChanged="List1_SelectedIndexChanged" /><br />
List 2 : <asp:DropDownList ID="List2" runat="server" AutoPostBack="true" /><br />
</div>
</asp:Content> |
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
|
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
public partial class Test : PlannisPage
{
protected override bool MustAuthenticated()
{
return false;
}
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
List1.Items.Add("");
List1.Items.Add(new ListItem("Element 1", "1"));
List1.Items.Add(new ListItem("Element 2", "2"));
List1.Items.Add(new ListItem("Element 3", "3"));
List1.Items.Add(new ListItem("Element 4", "4"));
}
}
protected void List1_SelectedIndexChanged(object sender, EventArgs e)
{
List2.Items.Clear();
switch (List1.SelectedValue)
{
case "1":
List2.Items.Add(new ListItem("Element 1.1", "1.1"));
List2.Items.Add(new ListItem("Element 1.2", "1.2"));
break;
case "2":
List2.Items.Add(new ListItem("Element 2.1", "2.1"));
List2.Items.Add(new ListItem("Element 2.2", "2.2"));
List2.Items.Add(new ListItem("Element 2.3", "2.3"));
List2.Items.Add(new ListItem("Element 2.4", "2.4"));
break;
case "3":
List2.Items.Add(new ListItem("Element 3.1", "3.1"));
break;
case "4":
break;
default:
List2.Items.Add("Choisissez Liste 1");
break;
}
}
} |
Et pof ! Ca ne fonctionne plus. Le AutoPostBack ne déclenche plus rien !
Comment résoudre mon souci ? Je n'arrive même pas à comprendre pourquoi ça ne fonctionne plus.
Aucune erreur côté .NET pas plus que dans le debugger JS.