gpt4 book ai didi

c# - 选定的索引在不应该的情况下更改了事件触发

转载 作者:太空宇宙 更新时间:2023-11-03 15:37:16 24 4
gpt4 key购买 nike

我刚刚遇到一个 ASP.NET 页面的奇怪情况。我的表单有 2 个具有 AutoPostBack="true" 的控件:一个 RadioButtonList 和一个 DropdownList。 RadioButtonList 也有 EnableViewState="False"。当我更改下拉列表的所选项目时,RadioButtonList SelectedIndexChanged 事件也会触发。如果我删除 EnableViewState="False",此行为就会消失。谁能解释为什么会这样?我在下面包含了示例代码,因此您可以自己查看此行为:

<div>                
<asp:RadioButtonList ID="rblTest" AutoPostBack="true" OnSelectedIndexChanged="rblTest_SelectedIndexChanged" EnableViewState="false" runat="server">
<asp:ListItem Text="Option 1" Value="1" />
<asp:ListItem Text="Option 2" Value="2" />
<asp:ListItem Text="Option 3" Value="3" />
</asp:RadioButtonList>
<br />
<br />
<asp:DropDownList ID="ddlTest" AutoPostBack="true" OnSelectedIndexChanged="ddlTest_SelectedIndexChanged" runat="server">
<asp:ListItem Text="Select One" Value="" />
<asp:ListItem Text="Option 1" Value="1" />
<asp:ListItem Text="Option 2" Value="2" />
<asp:ListItem Text="Option 3" Value="3" />
</asp:DropDownList>
<br />
<br />
<asp:Button ID="btnSubmit" OnClick="btnSubmit_Click" Text="Submit" EnableViewState="false" runat="server" />
<br />
<br />
<asp:Label ID="lblResult" runat="server" />
</div>

这是代码背后的代码:

protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
rblTest.SelectedIndex = 0;
}
}

protected void rblTest_SelectedIndexChanged(object sender, EventArgs e)
{
lblResult.Text += "RadioButton List SelectedIndexChanged fired<br />";
}

protected void btnSubmit_Click(object sender, EventArgs e)
{
lblResult.Text += "Submit Button Click Event Fired<br />";
}

protected void ddlTest_SelectedIndexChanged(object sender, EventArgs e)
{
lblResult.Text += "Dropdown List SelectedIndexChanged Event Fired<br />";
}

此外,如果您在后面的代码中注释掉这一行:

rblTest.SelectedIndex = 0;

然后此行为不会发生直到您从单选按钮列表中选择某些内容。非常感谢任何帮助。

最佳答案

当您将 EnableViewState 设置为 false 时,这意味着您不会保留对象的状态。这意味着当您进行自动发布时,这些值将重置为其原始值。

当它是回发时,您正在更改单选按钮的状态 (rblTest.SelectedIndex = 0),这会触发事件。因此,您更改了一个单选按钮并触发了 2 个事件。

还有一点要指出,请记住每次执行回发时,页面都会在服务器端重新创建。并执行页面的生命周期。 ViewState 用于该进程以填充控件。您可以在以下位置阅读更多相关信息:https://msdn.microsoft.com/en-us/library/ms178472%28v=vs.85%29.aspx

关于c# - 选定的索引在不应该的情况下更改了事件触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31393383/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com