除非运行AutoPostBack一次,否则ASP.NET updatepanel会刷新整个页面?

时间:2019-06-27 20:25:06

标签: c# asp.net ajax

我发现自己处境很奇怪。我正在使用包含gridview的更新面板来显示数据库结果。我在updatepanel中有一个带有一些过滤器的表单。用户应该能够应用所需的任何过滤器,然后使用“更新”按钮刷新结果。

正如我现在所拥有的,这将刷新整个页面。但是,如果我在下拉列表上设置了AutoPostBack="true",则情况会发生一些变化:

  • 我从下拉列表中选择一个值
  • 请稍等,页面完成一次回发,在该回发中,实际上没有任何结果被更新,并且下拉列表会自行重置
  • 我现在可以使用表格并且它可以正常运行
  • 如果我填写文本框,或在允许自动回发之前单击“更新”,则表单将继续刷新页面

我对此行为感到非常困惑。这是我的模板代码的基础

<asp:UpdatePanel id="GridUpdatepanel" runat="server">
<ContentTemplate>
    <form>
        <div class="row">
            <div class="col-md-8">
                <h5 class="align-middle" >Filters</h5>
            </div>
            <div class="col-md-4">
                <div class="pull-right">
                    <asp:button Text="Update" id="UpdateButton" OnClick="UpdateButton_Click" runat="server" CssClass="btn btn-primary btn-sm"/>
                    <asp:button Text="Reset" id="resetButton" OnClick="ResetButton_Click" runat="server" CssClass="btn btn-danger btn-sm"/>
                </div>
            </div>
        </div>
        <div class="row">
            <div class="input-group input-group-sm col-md-4">
                <asp:DropDownList runat="server" id="activeFilter" CssClass="form-control"  AutoPostBack="false" >
                <asp:ListItem selected="True" value="">-- Filter By Active/Inactive --</asp:ListItem>
                <asp:ListItem value="NULL">Active</asp:ListItem>
                <asp:ListItem value="NOT NULL">Inactive</asp:ListItem>
                </asp:DropDownList>
            </div>
            <div class="input-group input-group-sm col-md-4">
                <asp:TextBox id="jobIdFilter" CssClass="form-control" runat="server" placeholder="-- Filter By Job ID --" />
            </div>
        </div>
    </form>
    <asp:GridView>
    <!-- display data in table etc -->
    </asp:Gridview>
</ContentTemplate>
</asp:UpdatePanel>
public void UpdateButton_Click(Object sender, EventArgs e)
{
    LoadGridView();
    //LoadGridView() then takes the values from the form fields, modifies 
    //the SQL string and updates the table with the results
} 

最后要注意的是,我必须将此代码在包装在容器中的三个不同页面上重复,并使用导航标签导航到。我不确定它们是否会相互干扰,但是第一个选项卡可以正常工作,而其他两个选项卡则不会。

感谢您提供的任何帮助。

0 个答案:

没有答案