Bonjour,
Je fais face à un problème que je n'arrive pas à comprendre.
Si je crée une page "Text.aspx" avec dedans :
Code html : 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 <%@ 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 csharp : 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 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 html : 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 <%@ 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 csharp : Sélectionner tout - Visualiser dans une fenêtre à part
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 csharp : 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 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 html : Sélectionner tout - Visualiser dans une fenêtre à part
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 csharp : 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 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.
Partager