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函数。请问这又是为什么呢?如何解决? 展开
<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函数。请问这又是为什么呢?如何解决? 展开
4个回答
展开全部
几个问题:
第一,感觉你没有必要用两个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>
第一,感觉你没有必要用两个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>
展开全部
AutoPostBack="True"
自动回发给服务器 每次触发selectedIndexChanged事件 就会把相关数据传给服务 服务器处理完selectedIndexChanged事件后, 重新生成页面传给客户端,故会执行page_load
你可以在page_load事件中判断是不是回发处理页面 if (!ispostback){这里面的代码只在页面第一次加载时执行}
自动回发给服务器 每次触发selectedIndexChanged事件 就会把相关数据传给服务 服务器处理完selectedIndexChanged事件后, 重新生成页面传给客户端,故会执行page_load
你可以在page_load事件中判断是不是回发处理页面 if (!ispostback){这里面的代码只在页面第一次加载时执行}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
在if(!IsPostBack)里后加上doWorks_getSort1();doWorks_getSort2();
后再加上response.end()试试.
这样的话就会关闭流输出.
我也没试过,凭感觉的
后再加上response.end()试试.
这样的话就会关闭流输出.
我也没试过,凭感觉的
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
几个问题:
第一,感觉你没有必要用两个UpdatePanel
第二,Triggers只对外面的控件有效,因为你外面的控件在另一个UpdatePane里面,所以它找不到UpdatePane里面的控件
第三,Triggers只有当UpdatePane的UpdateMode属性设置为Conditional时才有效,你改成以下试试
第一,感觉你没有必要用两个UpdatePanel
第二,Triggers只对外面的控件有效,因为你外面的控件在另一个UpdatePane里面,所以它找不到UpdatePane里面的控件
第三,Triggers只有当UpdatePane的UpdateMode属性设置为Conditional时才有效,你改成以下试试
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询