Мне нужен обработчик событий динамического регистра.
Я попытался создать некоторый фрагмент кода для веб-формы ASP.NET и понял, что «что-то», которое делает выпадающий список, не вызовет событие SelectedIndexChanged.
Первый фрагмент (работает хорошо). Я регистрирую обработчик событий в файле ASPX.
<form id="form1" runat="server">
<asp:Label ID="lblName" runat="server" Text="Label"></asp:Label>
<asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>
<asp:DropDownList ID="Ddl1" runat="server" AutoPostBack="true" OnSelectedIndexChanged="Ddl1_SelectedIndexChanged">
</asp:DropDownList>
<asp:DropDownList ID="Ddl2" runat="server" AutoPostBack="true" OnSelectedIndexChanged="Ddl2_SelectedIndexChanged">
</asp:DropDownList>
<asp:Button ID="BtnSubmit" runat="server" Text="Submit" OnClick="BtnSubmit_Click" />
</form>
Затем в CS-файле я создаю 2 функции, подобные этой
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
Ddl2.Items.Add(new ListItem("1", "1"));
Ddl2.Items.Add(new ListItem("2", "2"));
Ddl2.Items.Add(new ListItem("3", "3"));
Ddl2.Items.Add(new ListItem("4", "4"));
Ddl1.Items.Add(new ListItem("1", "1"));
Ddl1.Items.Add(new ListItem("2", "2"));
Ddl1.Items.Add(new ListItem("3", "3"));
Ddl1.Items.Add(new ListItem("4", "4"));
BtnSubmit.Click += new EventHandler(BtnSubmit_Click);
Ddl1.SelectedIndex = 0;
Ddl2.SelectedIndex = 0;
}
}
public void Ddl2_SelectedIndexChanged(object sender, EventArgs e)
{
var st = new StackTrace();
var sf = st.GetFrame(0);
var currentMethodName = sf.GetMethod();
Console.WriteLine(currentMethodName);
Label1.Text = Ddl2.SelectedValue;
}
public void Ddl1_SelectedIndexChanged(object sender, EventArgs e)
{
var st = new StackTrace();
var sf = st.GetFrame(0);
var currentMethodName = sf.GetMethod();
Console.WriteLine(currentMethodName);
Label1.Text = Ddl1.SelectedValue;
}
Во-вторых, я удаляю Autopostback и OnSelectedIndexChanged из раскрывающегося списка 1 в представлении и перемещаю обработчик регистра в код PageLoad. Теперь больше не будет стрелять
Раскрывающийся список 1 откроет страницу обновления. Но обработчик событий больше не будет запускаться.
Я использую VS2017 Pro & .NET 4.7.2
<form id="form1" runat="server">
<asp:Label ID="lblName" runat="server" Text="Label"></asp:Label>
<asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>
<asp:DropDownList ID="Ddl1" runat="server">
</asp:DropDownList>
<asp:DropDownList ID="Ddl2" runat="server" AutoPostBack="true" OnSelectedIndexChanged="Ddl2_SelectedIndexChanged">
</asp:DropDownList>
<asp:Button ID="BtnSubmit" runat="server" Text="Submit" OnClick="BtnSubmit_Click" />
</form>
И в коде CS:
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
Ddl2.Items.Add(new ListItem("1", "1"));
Ddl2.Items.Add(new ListItem("2", "2"));
Ddl2.Items.Add(new ListItem("3", "3"));
Ddl2.Items.Add(new ListItem("4", "4"));
Ddl1.Items.Add(new ListItem("1", "1"));
Ddl1.Items.Add(new ListItem("2", "2"));
Ddl1.Items.Add(new ListItem("3", "3"));
Ddl1.Items.Add(new ListItem("4", "4"));
BtnSubmit.Click += new EventHandler(BtnSubmit_Click);
Ddl1.SelectedIndex = 0;
Ddl2.SelectedIndex = 0;
Ddl1.AutoPostBack = true;
Ddl1.SelectedIndexChanged += new System.EventHandler(Ddl1_SelectedIndexChanged);
}
}
public void Ddl2_SelectedIndexChanged(object sender, EventArgs e)
{
var st = new StackTrace();
var sf = st.GetFrame(0);
var currentMethodName = sf.GetMethod();
Console.WriteLine(currentMethodName);
Label1.Text = Ddl2.SelectedValue;
}
public void Ddl1_SelectedIndexChanged(object sender, EventArgs e)
{
var st = new StackTrace();
var sf = st.GetFrame(0);
var currentMethodName = sf.GetMethod();
Console.WriteLine(currentMethodName);
Label1.Text = Ddl1.SelectedValue;
}
Может ли кто-нибудь мне помочь:
- В чем разница между регистрацией обработчика событий для загрузки страницы или файла APSX?
- Какое событие жизненного цикла страницы можно зарегистрировать для запуска обработчика событий?
- Это ошибка Microsoft? Если это так, где я могу опубликовать эту ошибку?