我在更新面板中的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>
答案 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的所选项目更改时发生的回发是部分的(即整个页面不刷新)。