我是使用UpdatePanel
的新手,我有2个下拉列表:DropDownList_1
和DropDownList_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中,但整个页面仍在刷新。
4条答案
按热度按时间pgvzfuti1#
以下是您应该执行的操作:
AutoPostBack="true"
UpdateMode="Conditional"
(否则每次都会刷新)AsyncPostBackTrigger
指向第一个下拉SelectedIndexChanged
事件ChildrenAsTriggers="true"
:
控件应该位于同一个更新面板中,这样更简单。
vmdwslir2#
感谢Cristina提醒我检查控制台错误,我找到了修复方法。我所做的工作仅供有相同问题的人参考:
1.我缺少Ajax库,所以我将MicrosoftAjax.js和MicrosoftAjaxWebService导入到这个文件夹Scripts〉WebForms〉MSAjax中。
1.在我导入必要的Ajax库之后,我得到了这个控制台错误:
系统发生错误:系统Web表单页面请求管理器服务器错误异常:回发或回调参数无效。事件验证是使用配置中的或页面中的〈%@ Page EnableEventValidation=“true”%〉启用的。出于安全考虑,此功能验证回发或回调事件的参数是否源自最初呈现它们的服务器控件。如果数据有效且符合要求,请使用ClientScriptManager.RegisterForEventValidation方法来注册回发或回调数据以进行验证。
我所做的是在这个Ajax页面中的〈%Page %〉指令中添加
EnableEventValidation="false"
。在那之后,我不再有完整的页面重新加载,所有的工作现在就如何我想要的。
z9zf31ra3#
如果在您按照指导原则设置面板之后,面板仍然回发,请检查您是否没有为执行回调的特定控件设置
ClientIDMode="Static"
,或者通过使ClientIDMode默认为从web.config、Page或父容器中继承的static来设置ClientIDMode="Static"
。在您的方案中搜寻
ClientIDMode="Static"
,然后针对继承的控件(包括触发回传的控件)变更此设定,或针对每个触发回传的控件明确设定ClientIDMode="Predictable"
或ClientIDMode="AutoID"
。eqzww0vc4#
当你使用更新面板时,你必须注册你的事件,同时刷新页面,你必须使用微软的PageRequestManager重新订阅每个更新。
您必须在
javascript
的document.ready(function(){})
中初始化事件。例如:
var test=Sys.WebForms.PageRequestManager.getInstance();