第一种是 .UpdaterPanel
首先ScriptManager中要设置EnablePartialRendering="true" 来开启局部更新功能,
同时在UpdaterPanel中设置属性UpdateMode="Conditional/Always",
如选择是 Conditional 的话,还需UpdaterPanel按设置如下
<Triggers>
<asp:AsyncPostBackTrigger ControlID="Button3" EventName="Click" />
</Triggers>
ps:触发条件有2种,由事件或值来触发,按值来触发尚未在1.0.6版中发现,
触发的控件必须是服务器控件,该控件可在<ContentTemple>里,也可在UpdaterPanel外。
第二中是人为强制不postback
<asp:Button id="Button4" Text="采用HttpPost方法" OnClientClick="useHttpPost();return false;" runat="server" />如粗体部分所示,人为强制不postback,
比较
采用UpdaterPanel可以不用做重复功给$get(ElementId)赋值,代码也简练得多。只要把一同更新的放进一个UpdaterPanel里就可以了。
Tips:采用OnClientClick还是Click方法,(a).取决于你习惯在客户端调用Web
Service方法,还是在服务器端调用了。服务器端应该神秘点吧,但如传入的数据需要处理的话,在服务器端先进行一般处理也是个值得考虑的方法。
(b) Click方法,要Trigger配合,同时有个很大的限制,就是它只能刷新UpdaterPanel里的,不能刷新外面的;但OnClientClick却是里外都行。
============================================================================================
完整示例:
客户端js部分:
var num=0;
//局部刷新
function divIn()
{ num++;
WebService.HelloWorld(num,disDivIn);
}
function disDivIn(result)
{
$get("divIn").innerHTML
=result;
}
//页面加载时局部刷新
window.onload=function()
{
alert('pageOnLoad()');
divIn ();
}
客户端表现层部分:
<asp:ScriptManager ID="ScriptManager1" runat="server"
EnablePartialRendering="true" >
<Services>
<asp:ServiceReference InlineScript="true" Path="WebService.asmx" />
</Services>
</asp:ScriptManager>
<asp:Button id="Button3"
Text="Server局部刷新" runat="server"
OnClick="Button3_Click" />
<asp:Button id="Button4"
Text="Browser局部刷新" runat="server"
On ClientClick="divIn();return
false;" />
<asp:UpdatePanel ID="UpdatePanel1" runat="server"
UpdateMode="Conditional" RenderMode="Block">
<ContentTemplate>
<div id="divIn" runat="server"></div>
</ContentTemplate>
<Triggers>
<asp:AsyncPostBackTrigger ControlID="Button3" EventName="Click" />
</Triggers>
</asp:UpdatePanel>
Web Service部分
using
System.Web.Script.Services;
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[ScriptService]
public class WebService : System.Web.Services.WebService {
public
WebService () {
}
[WebMethod
]
[ScriptMethod]
public
string HelloWorld(int
i)
{//
System.Threading.Thread.Sleep(9000);
StringBuilder
str = new StringBuilder();
for
(int n = 0; n < i; n++)
{
str.Append("Hello World<br/>");
}
return
str.ToString();
}
}
橙色部分是决定Web Server中方法能否为客户端调用的关键,要自己手动添加
CS部分
protected void Button3_Click(object sender, EventArgs
e)
{
divIn.InnerHtml = divIn.InnerHtml
+ "the data is from server" + "<br/>";
}