【问题标题】:ASP.NET Dropdownlist SelectedIndexChanged fired again after rasing exception引发异常后再次触发 ASP.NET Dropdownlist SelectedIndexChanged
【发布时间】:2016-03-15 08:39:14
【问题描述】:

这是我的示例代码。
我的场景是
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 = "";
}

【问题讨论】:

  • 没有javascript它不会触发事件两次?
  • 我试过除了 javascript 但没有任何变化

标签: asp.net exception drop-down-menu selectedindexchanged


【解决方案1】:

这是因为事件 DropDownListState_SelectedIndexChanged 中的错误以异常方式结束对服务器的请求。这就是为什么并非所有属性和状态都被正确传播的原因。因此,当您点击按钮时,它会认为服务器上的下拉列表值与浏览器提供的值不同,并将再次触发 DropDownListState_SelectedIndexChanged。如果您注释掉错误,一切都会按预期工作。

【讨论】:

  • 谢谢!有没有办法避免这种行为?
  • Y,只是不要抛出错误 ;) 嘿,但是如果必须显示警报,您可以使用方法注册 javascript:ClientScript.RegisterStartupScript(this.GetType(),"JSScript", sb .ToString());
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-18
  • 2011-06-21
  • 1970-01-01
  • 1970-01-01
  • 2011-04-04
相关资源
最近更新 更多