防止ControlParameter AutoPostBack触发ObjectDataSource选择方法

时间:2019-03-19 15:19:39

标签: c# asp.net gridview postback objectdatasource

我用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不应同时触发。我想能够控制何时使用搜索按钮过滤数据。

2 个答案:

答案 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内处理其回发