GridView中的ASP.NET DropDownList控件导致SelectedIndexChanged事件的完全回发

时间:2011-01-26 22:48:53

标签: asp.net-ajax

我在更新面板中的gridview中有一个下拉列表控件(SourceDD),每次我点击下拉列表时,OnSelectedIndexChanged事件就会像它应该一样触发。但在此之前,它会执行完整的回发并运行整个Page_Load代码,这不是我想要的。基本上我希望它只是运行OnSelectedIndexChanged事件,就是这样,不会导致完整的回发。在我的事件中,我只是根据他们在SourceDD中做出的选择来启用/禁用下一列(SymbolDD),因此事件代码中没有任何特殊之处。如果有一种方法可以在包含gridview的updatepanel中进行完整的回发,请注意。非常感谢...

<asp:UpdatePanel ID="TestsPanel" runat="server" Visible="true" UpdateMode="Conditional" EnableViewState="false" ChildrenAsTriggers="true">
                <ContentTemplate>                   <asp:GridView ID="TestGridView" runat="server" Visible="true" CssClass="GridViewRows" AlternatingRowStyle-CssClass="TableRowEven"
                     AutoGenerateColumns="false">
                    <HeaderStyle CssClass="TableHead" />
                      <Columns>                                                         
                            <asp:TemplateField Headertext="Source">
                                    <ItemTemplate>                                   
                                        <asp:DropDownList runat="server" ID="SourceDD" AutoPostBack="true" OnSelectedIndexChanged="SourceDD_SelectedIndexChanged">
                                        </asp:DropDownList>                                                                                        
                                    </ItemTemplate>                                
                            </asp:TemplateField>                                 
                            <asp:TemplateField Headertext="Symbol">
                                    <ItemTemplate>                                   
                                        <asp:DropDownList runat="server" ID="SymbolDD">
                                        </asp:DropDownList>                                            
                                    </ItemTemplate>                                
                            </asp:TemplateField>                         
                        </Columns>                    
                    </asp:GridView>                        
                    </ContentTemplate>

3 个答案:

答案 0 :(得分:2)

如果您不希望回发或尝试修复您的代码以正确处理部分回发,请使用javascript / ajax处理该事件。

试试这些链接: http://encosia.com/2007/07/11/why-aspnet-ajax-updatepanels-are-dangerous/ http://www.asp.net/ajax/tutorials/understanding-partial-page-updates-with-asp-net-ajax

答案 1 :(得分:1)

我同意达斯汀的观点。使用javascript,你必须将它放在控件GridViewRowDataBound事件上,以便启用正确的控件。

这样的东西
RowDatabound(object sender, GridViewRowEventArgs  e)
{
   ((DropDownList)e.FindControl("SourceDD")).Attributes("onchange", <onchangelogic>);
   //use something like "document.getElementById('" +(DropDownList)e.FindControl("SymbolDD")).ClientID + "').enabled = true;"
   //or maybe it was .disabled = false....
}

答案 2 :(得分:0)

实际上,这个问题有一个解决方案。您可以将UpdatePanel添加到GridView的TemplateField的ItemTemplate中,并将DropDownList添加到此UpdatePanel。然后为DropDownList添加AsyncPostBackTrigger&#34; SelectedIndexChanged&#34;事件。这可以确保在DropDownList的所选项目更改时发生的回发是部分的(即整个页面不刷新)。