ASP.NET UpdatePanel不工作,它刷新整个页面

4bbkushb  于 2022-12-01  发布在  .NET
关注(0)|答案(4)|浏览(196)

我是使用UpdatePanel的新手,我有2个下拉列表:DropDownList_1DropDownList_2,其中DropDownList_2的内容将取决于DropDownList_1的选定值,下面是我的代码:

ASPX服务器:

<asp:ScriptManager ID="ScriptManager1" runat="server"></asp:ScriptManager>
<asp:UpdatePanel ID="UpdatePanel1" runat="server">
    <ContentTemplate>
        <asp:DropDownList ID="DropDownList_1" runat="server" AutoPostBack="true" OnSelectedIndexChanged="DropDownList_1_SelectedIndexChanged" DataSourceID="businessgroup" DataTextField="BusinessGroupName" DataValueField="Id"></asp:DropDownList>
    </ContentTemplate>
    <Triggers>
        <asp:AsyncPostBackTrigger ControlID="DropDownList_1" EventName="SelectedIndexChanged" />
    </Triggers>
</asp:UpdatePanel>

<asp:DropDownList ID="DropDownList_2" runat="server" DataSourceID="jobposition" DataTextField="JobPositionName" DataValueField="Id"></asp:DropDownList>

政务司司长:

protected void DropDownList_1_SelectedIndexChanged(object sender, EventArgs e)
{
    SqlDataSource1.SelectCommand = "SELECT DISTINCT * FROM [JobPosition] WHERE BusinessGroupID ="+DropDownList_1.SelectedValue;
    DropDownList_2.DataBind();
}

它的工作如上所述,但我不希望在我的输出是整个页面刷新,我也尝试删除我的DropDownList_1中的AutoPostBack="true",但它停止工作,我在这里做错了什么?谢谢!

编辑:

我还尝试将DropDownList_2移动到UpdatePanel的ContentTemplate中,但整个页面仍在刷新。

pgvzfuti

pgvzfuti1#

以下是您应该执行的操作:

  • 如果要刷新第二个下拉列表,则第二个下拉列表应位于更新面板内
  • 仅为第二个下拉菜单设置AutoPostBack="true"
  • 为更新面板设置UpdateMode="Conditional"(否则每次都会刷新)
  • 设置面板的AsyncPostBackTrigger指向第一个下拉SelectedIndexChanged事件
  • 为“更新”面板设置ChildrenAsTriggers="true"

<asp:ScriptManager ID="ScriptManager1" runat="server" EnablePartialRendering="true"></asp:ScriptManager>     
<asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Conditional" ChildrenAsTriggers="true">
                <ContentTemplate>
                    <asp:DropDownList ID="DropDownList1" runat="server" OnSelectedIndexChanged="DropDownList_1_SelectedIndexChanged" DataSourceID="businessgroup" DataTextField="BusinessGroupName" DataValueField="Id"></asp:DropDownList>
                    <asp:DropDownList ID="DropDownList_2" runat="server" AutoPostBack="true" DataSourceID="jobposition" DataTextField="JobPositionName" DataValueField="Id"></asp:DropDownList>
                </ContentTemplate>
                <Triggers>
                    <asp:AsyncPostBackTrigger ControlID="DropDownList_1" EventName="SelectedIndexChanged" />
                </Triggers>
            </asp:UpdatePanel>

控件应该位于同一个更新面板中,这样更简单。

vmdwslir

vmdwslir2#

感谢Cristina提醒我检查控制台错误,我找到了修复方法。我所做的工作仅供有相同问题的人参考:
1.我缺少Ajax库,所以我将MicrosoftAjax.js和MicrosoftAjaxWebService导入到这个文件夹Scripts〉WebForms〉MSAjax中。
1.在我导入必要的Ajax库之后,我得到了这个控制台错误:
系统发生错误:系统Web表单页面请求管理器服务器错误异常:回发或回调参数无效。事件验证是使用配置中的或页面中的〈%@ Page EnableEventValidation=“true”%〉启用的。出于安全考虑,此功能验证回发或回调事件的参数是否源自最初呈现它们的服务器控件。如果数据有效且符合要求,请使用ClientScriptManager.RegisterForEventValidation方法来注册回发或回调数据以进行验证。
我所做的是在这个Ajax页面中的〈%Page %〉指令中添加EnableEventValidation="false"
在那之后,我不再有完整的页面重新加载,所有的工作现在就如何我想要的。

z9zf31ra

z9zf31ra3#

如果在您按照指导原则设置面板之后,面板仍然回发,请检查您是否没有为执行回调的特定控件设置ClientIDMode="Static",或者通过使ClientIDMode默认为从web.config、Page或父容器中继承的static来设置ClientIDMode="Static"
在您的方案中搜寻ClientIDMode="Static",然后针对继承的控件(包括触发回传的控件)变更此设定,或针对每个触发回传的控件明确设定ClientIDMode="Predictable"ClientIDMode="AutoID"

eqzww0vc

eqzww0vc4#

当你使用更新面板时,你必须注册你的事件,同时刷新页面,你必须使用微软的PageRequestManager重新订阅每个更新。
您必须在javascriptdocument.ready(function(){})中初始化事件。
例如:var test=Sys.WebForms.PageRequestManager.getInstance();

相关问题