为什么此事件处理程序不会导致StackOverflow异常?

时间:2013-04-29 13:37:51

标签: c# asp.net

我有一个带有5个GridView控件的asp.net页面,所有这些控件都链接到同一个SelectedIndexChanged事件,如下所示

    <div id="containerOne" class ="containerLeft">
        <h2 class="WorkInProgressHeading">To Analyse</h2>
        <asp:LinkedGridView runat="server"  ID ="grdAwaitingAnalysis" CssClass="Grid" OnSelectedIndexChanged="grid_SelectedIndexChanged">
            <AlternatingRowStyle CssClass="GridAltItem"/>
            <RowStyle CssClass="GridItem"/>
            <SelectedRowStyle CssClass="GridSelectedItem"/>
        </asp:LinkedGridView>
    </div>
    <div id="containerTwo" class="containerLeft">
        <h2 class="WorkInProgressHeading">Analysing...</h2>
        <asp:LinkedGridView runat="server" ID="grdAnalysisInProgress" CssClass="Grid" OnSelectedIndexChanged="grid_SelectedIndexChanged">
            <AlternatingRowStyle CssClass="GridAltItem"/>
            <RowStyle CssClass="GridItem"/>
            <SelectedRowStyle CssClass="GridSelectedItem"/>
        </asp:LinkedGridView>
    </div> etc.....

在后面的代码中,事件处理程序如下

    protected void grid_SelectedIndexChanged(object sender, EventArgs e)
    {
        var sendingGrid = sender as LinkedGridView;

        if (sendingGrid.ID != "grdAwaitingAnalysis") grdAwaitingAnalysis.SelectedIndex = -1;
        if (sendingGrid.ID != "grdAnalysisInProgress") grdAnalysisInProgress.SelectedIndex = -1;
        if (sendingGrid.ID != "grdAwaitingReporting") grdAwaitingReporting.SelectedIndex = -1;
        if (sendingGrid.ID != "grdAwaitingInterp") grdAwaitingInterp.SelectedIndex = -1;
        if (sendingGrid.ID != "grdInterpInProgress") grdInterpInProgress.SelectedIndex = -1;

   }

我很惊讶这并没有导致stackoverflow异常,因为当每个选定的索引设置为-1时,我希望grid_SelectedIndexChanged事件再次触发,但事实并非如此。

这是因为它是一个网页而不是WPF / Winforms情况吗? 我对ASP.NET比较陌生,所以我在思考类似于WPF / WinForms应用程序时错了吗?

感谢。

1 个答案:

答案 0 :(得分:0)

  

这是因为它是一个网页而不是WPF

可能。在非AJAX表单中,如果索引与之前的呈现不同,IndexChanged事件仅在回发上触发

在WPF / Winforms世界中,事件附加到实际控件,因此当值更改时,事件会立即触发

请记住,事件仅在索引实际更改时触发。将其设置为相同的值不会触发事件。