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 很奇怪哦
嗯 行是行 但是会在下面 我想两个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 内的模板文本框字段