UpdatePanel 里面放了两个Button,但是还是会全刷页面啊 ASP.NET
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了UpdatePanel 里面放了两个Button,但是还是会全刷页面啊 ASP.NET相关的知识,希望对你有一定的参考价值。
我先是在里面放了一个gridview ,gridview 中的button倒支持局部刷新,之后在下方加入如下两个按钮后,下方按钮会全局刷新。我是想自己写分页代码的
<div style="height:35px;">
<div class="float_left padding5">
</div>
<div class="float_right padding5 paging">
<div class="float_left padding_top4">
<span class="paging_disabled">
<asp:Button ID="LastPages" runat="server" Text="上一页" onclick="LastPages_Click" />
<asp:Button ID="Pages1" runat="server" Text="1" onclick="Pages1_Click" CssClass="button" />
<asp:Button ID="Pages2" runat="server" Text="2" onclick="Pages2_Click" CssClass="button" />
<asp:Button ID="Pages3" runat="server" Text="3" CssClass="button" onclick="Pages3_Click"/>
<asp:Label ID="PageNow" runat="server" Text="1"></asp:Label></span>
<span>...</span>
<asp:Button ID="PagesMax" runat="server" Text="" CssClass="button"/>
<asp:Button ID="NextPages" runat="server" Text="下一页" CssClass="button" onclick="NextPages_Click"/>
</div>
<div class="clear"></div>
</div>
<div class="clear"></div>
</div>
<asp:ScriptManager ID="ScriptManager1" runat="server">
</asp:ScriptManager>
<asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Conditional">
<ContentTemplate>
<asp:Label ID="lb1" runat="server" ></asp:Label>
<br />
<asp:UpdatePanel ID="UpdatePanel2" runat="server" UpdateMode="Conditional">
<ContentTemplate>
<asp:Label ID="lb2" runat="server" ></asp:Label>
<asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="Button" />
</ContentTemplate>
</asp:UpdatePanel>
</ContentTemplate>
<Triggers>
<asp:AsyncPostBackTrigger ControlID="Button1" EventName="Click" />
</Triggers>
</asp:UpdatePanel>
在按钮的Click事件中和(一)中的一样。
注意:
把两个UpdatePanel控件的UpdateMode属性设为Conditional,要把内部控件ChildrenAsTrigger设为 True。但这样内部UpdatePanel内的控件只引发自身的刷新,不会引发外部的UpdatePanel控件的刷新,不会刷新外部的 UpdatePanel控件,因此我们还需要为外部UpdatePanel控件加入一个触发器,触发源指定为Button1控件的Click事件上。
三、两个嵌套的UpdatePanel控件,外部的UpdatePanel内的控件回发只引发内部控件的更新
在页面上放一个ScriptManager和UpdatePanel控件(UpdatePanel1),在UpdatePanel1中放入一个标签控件 (lb1)、一个按钮(Button1)和另一个UpdatePanel控件(UpdatePanel2),在UpdatePanel2控件中放一个标签控件lb2。
<asp:ScriptManager ID="ScriptManager1" runat="server">
</asp:ScriptManager>
<asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Conditional" ChildrenAsTriggers="False">
<ContentTemplate>
<asp:Label ID="lb1" runat="server" ></asp:Label>
<asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="Button" /><br />
<asp:UpdatePanel ID="UpdatePanel2" runat="server" UpdateMode="Conditional">
<ContentTemplate>
<asp:Label ID="lb2" runat="server" ></asp:Label>
</ContentTemplate>
<Triggers>
<asp:AsyncPostBackTrigger ControlID="Button1" EventName="Click" />
</Triggers>
</asp:UpdatePanel>
</ContentTemplate>
</asp:UpdatePanel>
在按钮的Click事件中和(一)中的一样。
注意:
要把两个UpdatePanel控件的UpdateMode设为Conditional,把外部UpdatePanel控件的 ChildrenAsTrigger设为false。这样两个UpdatePanel控件都不会刷新,所以还要为内部的UpdatePanel控件建立触 发器,触发源指向外部UpdatePanel中的的Button1的Click事件上。
四、母版页中使用UpdatePanel控件
如果将ScriptManager控件添加在母版页上的话,那么各内容页面就没必要再添加ScriptManager控件了,只需添加UpdatePanel控件就可以了,因为母版页和内容页面将来生成的是一个页面的实例,而在一个页面上是不允许同时存在两个ScriptManager控件的。
如果ScriptManager控件没有添加在母版页上的话,那只能把ScriptManager控件添加在其中一个内容页面里。不要向每一个内容页面中添加ScriptManager控件。
1、内容页面中的UpdatePanel内的控件引起回发,只更新当前内容页面的内容。
此时按钮分别在各自的UpdatePanel控件内。
将两个内容页面内的两个UpdatePanel控件的UpdateMode设为Conditional,ChildrenAsTrigger设为True。
在按钮的Click事件中和(一)中的一样。
这样就出现各内容页的UpdatePanel内的按钮只对当前内容页起作用。
2、在母版页中的按钮引起回发,更新指定内容页的信息。
此时有两个按钮:ButtonOut在母版页中,ButtonIn在内容页面1中。
当点击ButtonOut时,异步更新两个内容页面的信息。当点击ButtonIn时,异步更新母版面中的UpdatePanel1中的信息。
母版页html代码如下:
<div>
母版页
3、<asp:ScriptManager ID="ScriptManager1" runat="server">
</asp:ScriptManager>
<asp:UpdatePanel ID="UpdatePanel1" runat="server" RenderMode="Inline" UpdateMode="Conditional">
<ContentTemplate>
<asp:Label ID="lbl" runat="server" Text="Label"></asp:Label>
</ContentTemplate>
</asp:UpdatePanel>
<br />
<asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="ButtonOut" /><br />
<table width=80%>
<tr>
<td>
<asp:contentplaceholder id="ContentPlaceHolder1" runat="server">
</asp:contentplaceholder>
</td>
<td bgcolor=maroon>
<asp:ContentPlaceHolder ID="ContentPlaceHolder2" runat="server">
</asp:ContentPlaceHolder>
</td>
</tr>
</table>
<br />
内容页面的HTML代码如下:
<%@ Page Language="C#" MasterPageFile="~/MasterPage.master" AutoEventWireup="true" CodeFile="Child.aspx.cs" Inherits="Child" Title="UpdatePanel Test Page" %>
<%@ MasterType VirtualPath="~/MasterPage.master" %>
<asp:Content ID="Content1" ContentPlaceHolderID="ContentPlaceHolder1" runat="Server">
<asp:UpdatePanel ID="UpdatePanel1" runat="server">
<ContentTemplate>
<asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>
<asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="ButtonInner" />
</ContentTemplate>
</asp:UpdatePanel>
</asp:Content>
<asp:Content ID="Content2" runat="server" ContentPlaceHolderID="ContentPlaceHolder2">
<asp:UpdatePanel ID="UpdatePanel2" runat="server">
<ContentTemplate>
<asp:Label ID="Label2" runat="server" Text="Label"></asp:Label>
</ContentTemplate>
</asp:UpdatePanel>
</asp:Content>
母版页的CS代码如下:
protected void Page_Load(object sender, EventArgs e)
ScriptManager1.RegisterAsyncPostBackControl(this.Button1);
protected void Button1_Click(object sender, EventArgs e)
Label lbl1 = (Label)this.ContentPlaceHolder1.FindControl("Label1");
lbl1.Text = DateTime.Now.ToString();
Label lbl2 = (Label)this.ContentPlaceHolder2.FindControl("Label2");
lbl2.Text = DateTime.Now.ToString();
public string BindTitle
get
return lbl.Text;
set
lbl.Text = value;
Child孩子页面的CS代码如下:
protected void Button1_Click(object sender, EventArgs e)
Label1.Text = Master.BindTitle;
Master.BindTitle = "ContentPage1's Action";
((UpdatePanel)Master.FindControl("UpdatePanel1")).Update(); ;
五、用户控件中使用UpdatePanel控件
如果父页面中存在ScriptManager控件,那用户控件的页面中不应再放入ScriptManager控件了,只在用户控件中加入UpdatePanel。
其控件的回发与更新规律与使用方式与母版页一样。 参考技术A 前台
<asp:ScriptManager ID="ScriptManager1" runat="server">
</asp:ScriptManager>
<asp:UpdatePanel ID="UpdatePanel1" runat="server">
<ContentTemplate>
<asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>
</ContentTemplate>
<Triggers>
<asp:AsyncPostBackTrigger ControlID="Button3" EventName="Click" />
</Triggers>
</asp:UpdatePanel>
<asp:Button ID="Button3" runat="server" Text="显示当前时间" onclick="Button3_Click" />
后台
protected void Button3_Click(object sender, EventArgs e)
Label1.Text = DateTime.Now.ToString();
你要button 放在UpdatePanel 外面 要先指定Triggers可以导致UpdatePanel 更新的触发器的集合的。追问
我加上之后这是什么原因呢?缺少引用还是语法不对?
本回答被提问者采纳 参考技术B 你是 全局UpdatePanel ?如果是这样的话就相当于 整页刷新了
具体某个局部刷新的话,你在后台代码要 指定刷新的 UpdatePanel追问
如何指定?
参考技术C 不知到WPF GroupBox 里面不能添加两个Button 的问题
只能添加杨一个Button 不能添加两三个Button 很奇怪哦
参考技术A 把Grid扔进GroupBox里面,再将控件添加到Grid里面 参考技术B 你把其他Button也写在Stack中不行吗?追问嗯 行是行 但是会在下面 我想两个Button 并排着过去
追答还有Button 的位置 Left 和 top 都赋值不了 拉动过去 然后 会自动回去.
这是stack布局的特点决定的,就是紧凑型的。
你如果想实现两个按钮并排,并且想控制其位置,应该用grid网格布局,这个肯定可以实现你要求。
能贴一下案例代码吗? 谢谢
追答我也是刚学WPF,感觉grid肯定能实现你的功能,因为是按照风格来布局嘛。但具体的代码,我还写不出来。
本回答被提问者采纳 参考技术C 你不能指望在groupbox存在两种布局,就像楼上说的,干嘛不写到stackpanel里?追问嗯 行是行 但是会在下面 我想两个Button 并排着过去
还有Button 的位置 Left 和 top 都赋值不了 拉动过去 然后 会自动回去
以上是关于UpdatePanel 里面放了两个Button,但是还是会全刷页面啊 ASP.NET的主要内容,如果未能解决你的问题,请参考以下文章
WPF GroupBox 里面不能添加两个Button 的问题
Asp.net WebForm 中 UpdatePanel 内的模板文本框字段