10分求解asp.net ajax updatepanel局部页面刷新问题。

.aspx文件中的部分代码如下:<asp:ScriptManagerID="ScriptManager2"runat="server"></asp:ScriptManag... .aspx文件中的部分代码如下:
<asp:ScriptManager ID="ScriptManager2" runat="server">
</asp:ScriptManager>
<asp:UpdatePanel ID="UpdatePanel3" runat="server">
<ContentTemplate>
<asp:DropDownList ID="DropDownList1" runat="server" AutoPostBack="True" Width="205px"
OnSelectedIndexChanged="DropDownList1_SelectedIndexChanged">
</asp:DropDownList>
</ContentTemplate>
</asp:UpdatePanel>
<asp:UpdatePanel ID="UpdatePanel4" runat="server">
<ContentTemplate>
<asp:ListBox ID="ListBox1" runat="server" Height="109px" Width="209px"></asp:ListBox>
</ContentTemplate>
<Triggers>
<asp:AsyncPostBackTrigger ControlID="DropDownList1" EventName="SelectedIndexChanged" />
</Triggers>
</asp:UpdatePanel>

.aspx.cs文件的部分代码如下:
protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e)
{fun1();
fun2();
//两个函数都是访问后台数据库
}
问题是:当我选择下拉框时,整个页面任然在刷新。用debug看后,发现DropDownList1_SelectedIndexChanged函数执行完后,将继续执行Page_Load函数。请问这是为什么呀?怎么解决呢?注:我用的是vs2008。
听取以上回答的意见后,我更改了一些代码,如下:
.aspx文件:
<asp:ScriptManager ID="ScriptManager1" runat="server"></asp:ScriptManager>
<asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Conditional">
<ContentTemplate>
<asp:DropDownList ID="DSort1" runat="server" AutoPostBack="True" Width="205px" OnSelectedIndexChanged="DSort1_SelectedIndexChanged">
</asp:DropDownList><asp:ListBox ID="LSort2" runat="server" Height="109px" width="209px"></asp:ListBox></ContentTemplate><Triggers><asp:AsyncPostBackTrigger ControlID="DSort1" EventName="SelectedIndexChanged" /></Triggers></asp:UpdatePanel>
.cs文件:
Page_Load事件加上 if(!IsPostBack),它和DSort1_SelectedIndexChanged函数里面的函数都是doWorks_getSort1();doWorks_getSort2();(从数据库中读数据到列表框中)。但是,改变下拉框的选项时,整个页面任然在刷新,debug测试发现,执行完DSort1_SelectedIndexChanged函数后,将会执行Page_UnLoad函数。请问这又是为什么呢?如何解决?
展开
 我来答
百度网友76e521f
2009-04-17 · TA获得超过3304个赞
知道小有建树答主
回答量:262
采纳率:0%
帮助的人:121万
展开全部
几个问题:
第一,感觉你没有必要用两个UpdatePanel
第二,Triggers只对外面的控件有效,因为你外面的控件在另一个UpdatePane里面,所以它找不到UpdatePane里面的控件
第三,Triggers只有当UpdatePane的UpdateMode属性设置为Conditional时才有效,你改成以下试试

<asp:ScriptManager ID="ScriptManager2" runat="server">
</asp:ScriptManager>
<asp:UpdatePanel ID="UpdatePanel3" runat="server">
<ContentTemplate>
<asp:DropDownList ID="DropDownList1" runat="server" AutoPostBack="True" Width="205px"
OnSelectedIndexChanged="DropDownList1_SelectedIndexChanged">
</asp:DropDownList>
<asp:ListBox ID="ListBox1" runat="server" Height="109px" Width="209px"></asp:ListBox>
</ContentTemplate>
</asp:UpdatePanel>
仵天菱C
2009-04-16 · TA获得超过233个赞
知道小有建树答主
回答量:173
采纳率:0%
帮助的人:180万
展开全部
AutoPostBack="True"
自动回发给服务器 每次触发selectedIndexChanged事件 就会把相关数据传给服务 服务器处理完selectedIndexChanged事件后, 重新生成页面传给客户端,故会执行page_load

你可以在page_load事件中判断是不是回发处理页面 if (!ispostback){这里面的代码只在页面第一次加载时执行}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
崇鸿3
2009-04-21
知道答主
回答量:60
采纳率:0%
帮助的人:0
展开全部
在if(!IsPostBack)里后加上doWorks_getSort1();doWorks_getSort2();
后再加上response.end()试试.
这样的话就会关闭流输出.
我也没试过,凭感觉的
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
可亭晚宰昭
2019-12-10 · TA获得超过3.6万个赞
知道大有可为答主
回答量:1.2万
采纳率:27%
帮助的人:1167万
展开全部
几个问题:
第一,感觉你没有必要用两个UpdatePanel
第二,Triggers只对外面的控件有效,因为你外面的控件在另一个UpdatePane里面,所以它找不到UpdatePane里面的控件
第三,Triggers只有当UpdatePane的UpdateMode属性设置为Conditional时才有效,你改成以下试试
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式