Предотвращение запуска AutoPostBack ControlParameter от метода выбора ObjectDataSource - PullRequest
1 голос
/ 19 марта 2019

Я создал простой ASP Gridview с ObjectDataSource, чтобы получать данные из моей базы данных и отображать их в 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 ]

1 голос
/ 26 марта 2019

Вы можете использовать панель обновления для предотвращения автоответа на 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>

Надеюсь, это поможет. :)

0 голосов
/ 01 апреля 2019

Первый метод: Я использовал этот метод, он эффективен, добавьте его в выпадающий список 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>

Второй метод - поместить выпадающий список в UpdatePanel и обработать его обратную передачу внутри Trigger

...