ASP.NET Dropdownlist SelectedIndexChanged 在引发异常后再次触发
ASP.NET Dropdownlist SelectedIndexChanged fired again after rasing exception
这是我的示例代码。
我的场景是
1. 更改下拉列表项将触发 SelectedIndexChanged 事件。
2. 在 SelectedIndexChanged 事件期间,引发异常。
3.弹出错误提示信息
4.点击按钮
5. SelectedIndexChanged 再次触发。
我真的很想知道这个过程是怎么回事?
<form id="form1" runat="server">
<asp:ScriptManager ID="ScriptManager1" runat="server" />
<script type="text/javascript">
Sys.WebForms.PageRequestManager.getInstance().add_endRequest(PageRequestManager_OnEndRequest);
function PageRequestManager_OnEndRequest(sender, args) {
//debugger;
var alertMessage = "Application exception has been occurred.\n\nMessage: ";
if (args.get_error() && args.get_error().httpStatusCode == '500') {
var errorMessage = args.get_error().message
var findIndex = 0;
args.set_errorHandled(true);
if ((findIndex = errorMessage.indexOf(":")) > -1) {
errorMessage = errorMessage.substr(findIndex + 2);
}
alert(alertMessage + errorMessage);
}
};
</script>
<div>
<asp:UpdatePanel runat="Server" UpdateMode="Conditional" ID="UpdatePanel1">
<ContentTemplate>
<asp:DropDownList ID="DropDownListState" runat="server" OnSelectedIndexChanged="DropDownListState_SelectedIndexChanged" AutoPostBack="true">
<asp:ListItem Text="Michigan" Value="07"></asp:ListItem>
<asp:ListItem Text="Mississippi" Value="08"></asp:ListItem>
<asp:ListItem Text="Nevada" Value="09"></asp:ListItem>
</asp:DropDownList>
<asp:Button runat="server" ID="Button" OnClick="Button_Click" Text="Click Here" />
</ContentTemplate>
</asp:UpdatePanel>
</div>
</form>
代码隐藏:
protected void DropDownListState_SelectedIndexChanged(object sender, EventArgs e)
{
int stateNo = 0;
string stateName = "California";
stateNo = Convert.ToInt32(stateName);
}
protected void Button_Click(object sender, EventArgs e)
{
string ddd = "";
}
这是因为事件DropDownListState_SelectedIndexChanged中的错误以异常方式结束了对服务器的请求。这就是为什么不是所有的属性和状态都被正确传播的原因。因此,当您点击按钮时,它会认为服务器上的下拉列表值与浏览器提供的值不同,并会再次触发 DropDownListState_SelectedIndexChanged。如果您注释掉该错误,一切都会按预期工作。
这是我的示例代码。
我的场景是
1. 更改下拉列表项将触发 SelectedIndexChanged 事件。
2. 在 SelectedIndexChanged 事件期间,引发异常。
3.弹出错误提示信息
4.点击按钮
5. SelectedIndexChanged 再次触发。
我真的很想知道这个过程是怎么回事?
<form id="form1" runat="server">
<asp:ScriptManager ID="ScriptManager1" runat="server" />
<script type="text/javascript">
Sys.WebForms.PageRequestManager.getInstance().add_endRequest(PageRequestManager_OnEndRequest);
function PageRequestManager_OnEndRequest(sender, args) {
//debugger;
var alertMessage = "Application exception has been occurred.\n\nMessage: ";
if (args.get_error() && args.get_error().httpStatusCode == '500') {
var errorMessage = args.get_error().message
var findIndex = 0;
args.set_errorHandled(true);
if ((findIndex = errorMessage.indexOf(":")) > -1) {
errorMessage = errorMessage.substr(findIndex + 2);
}
alert(alertMessage + errorMessage);
}
};
</script>
<div>
<asp:UpdatePanel runat="Server" UpdateMode="Conditional" ID="UpdatePanel1">
<ContentTemplate>
<asp:DropDownList ID="DropDownListState" runat="server" OnSelectedIndexChanged="DropDownListState_SelectedIndexChanged" AutoPostBack="true">
<asp:ListItem Text="Michigan" Value="07"></asp:ListItem>
<asp:ListItem Text="Mississippi" Value="08"></asp:ListItem>
<asp:ListItem Text="Nevada" Value="09"></asp:ListItem>
</asp:DropDownList>
<asp:Button runat="server" ID="Button" OnClick="Button_Click" Text="Click Here" />
</ContentTemplate>
</asp:UpdatePanel>
</div>
</form>
代码隐藏:
protected void DropDownListState_SelectedIndexChanged(object sender, EventArgs e)
{
int stateNo = 0;
string stateName = "California";
stateNo = Convert.ToInt32(stateName);
}
protected void Button_Click(object sender, EventArgs e)
{
string ddd = "";
}
这是因为事件DropDownListState_SelectedIndexChanged中的错误以异常方式结束了对服务器的请求。这就是为什么不是所有的属性和状态都被正确传播的原因。因此,当您点击按钮时,它会认为服务器上的下拉列表值与浏览器提供的值不同,并会再次触发 DropDownListState_SelectedIndexChanged。如果您注释掉该错误,一切都会按预期工作。