我用ObjectDataSource
创建了一个简单的ASP Gridview,以从数据库中获取数据并将其显示在GridView
中。 ObjectDataSource
看起来像这样:
<asp:ObjectDataSource
ID="ObjectDataSourceTest"
runat="server"
SelectMethod="GetTestData"
TypeName="DataManager"
<SelectParameters>
<asp:Parameter Name="sortExpression" Type="String" />
<asp:ControlParameter ControlID="DropDownListXY" Name="xyFilter" Type="String" />
</SelectParameters>
</asp:ObjectDataSource>
ControlParameter
是一个DropDownList
,用于过滤我的GridView
。它放在<asp:Panel>
内,看起来像这样:
<div class="grid-100">
<asp:DropDownList ID="DropDownListXY" OnSelectedIndexChanged="DropDownListXY_SelectedIndexChanged" DataSourceID="ObjectDataSourceApplikationTyp" runat="server" DataValueField="test_guid" DataTextField="test" AppendDataBoundItems="true" AutoPostBack="true">
<asp:ListItem Text="-- all --" Value=""></asp:ListItem>
</asp:DropDownList>
</div>
我的问题是,每当我从DropDownList
中选择某项时,都会触发SelectMethod
。我尝试关闭AutoPostBack
上的DropDownList
,但是PostBack对于其他功能很重要,因此我不能一直将其保留在AutoPostBack="false"
上,而必须始终将其保留在True
上。
我的问题是:如何防止这种情况发生。我想将AutoPostBack
保留在DropDownList
上。但是我的SelectMethod不应同时触发。我想能够控制何时使用搜索按钮过滤数据。
答案 0 :(得分:1)
您可以使用updatepanel来防止对selectIndex进行自动回发我最近遇到了sam问题,我想创建一个级联下拉列表,并且我不希望页面在选定的索引更改后刷新。如果您想了解更多,这个家庭教师也可以解决您的问题https://www.aspsnippets.com/Articles/Cascading-DropDownList-for-CountryStateCity-in-ASPNet.aspx
否则,您的代码应如下所示。
<div class="grid-100">
<asp:ScriptManager ID="ScriptManager1" runat="server">
</asp:ScriptManager>
<asp:UpdatePanel ID="UpdatePanel1" runat="server" >
<ContentTemplate>
<asp:DropDownList ID="DropDownListXY" OnSelectedIndexChanged="DropDownListXY_SelectedIndexChanged" DataSourceID="ObjectDataSourceApplikationTyp" runat="server" DataValueField="test_guid" DataTextField="test" AppendDataBoundItems="true" AutoPostBack="true">
<asp:ListItem Text="-- all --" Value=""></asp:ListItem>
</asp:DropDownList>
</ContentTemplate>
<Triggers>
<asp:AsyncPostbackTrigger ControlID="DropDownListXY" EventName="SelectedIndexChanged" />
<asp:PostBackTrigger ControlID="btnConfirmPurchases" />
</Triggers>
</asp:UpdatePanel>
</div>
希望这会有所帮助。 :)
答案 1 :(得分:0)
第一种方法::我已经使用了这种方法,它很有效,请将其添加到您的下拉菜单中 onchange =“ javascript:setTimeout('__ doPostBack(\'DropDownListXY \',\'\')',0)”,并确保将AutoPostback设置为true
<div class="grid-100">
<asp:DropDownList ID="DropDownListXY" OnSelectedIndexChanged="DropDownListXY_SelectedIndexChanged" DataSourceID="ObjectDataSourceApplikationTyp" runat="server" DataValueField="test_guid" DataTextField="test" AppendDataBoundItems="true" onchange="javascript:setTimeout('__doPostBack(\'DropDownListXY\',\'\')', 0)" AutoPostBack="true">
<asp:ListItem Text="-- all --" Value=""></asp:ListItem>
</asp:DropDownList>
</div>
第二种方法是将Dropdownlist放在UpdatePanel内,并在Trigger内处理其回发