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>

atePanel2控件中放一个标签控件lb2和一个按 钮(Button1)。
<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的主要内容,如果未能解决你的问题,请参考以下文章

ASP.NET 用AJAX在页面上传头像,不能异步刷新?

WPF GroupBox 里面不能添加两个Button 的问题

Asp.net WebForm 中 UpdatePanel 内的模板文本框字段

UpdatePanel 只刷新一次

UpdatePanel OnTextChanged 中的 ASP.NET TextBox 不会触发

android 怎样让两个button控件挨在一起,左右对齐 没有距离?