ASP.NET 2.0,无刷新页面效果!
“无刷新页面”,只是一种不确切的效果描述(其实还有其他各种方法来实现这个效果),更确切的说法是:在页面上用JavaScript调用服务器端的一个方法,然后处理返回的数据。实现它最标准的方法当然是XMLHTTP。但是,程序员都是懒惰的家伙,每个人都希望能有更方便的方法,或者,更佳的包装。比如,Lostinet的Rane就是对XMLHTTP的一个很好的包装。
终于,在ASP.NET 2.0里面,我们可以轻松的来做到这点了。服务器端任何实现了System.Web.UI.ICallbackEventHandler接口的控件,都可以通过RaiseCallbackEvent()方法来处理从页面上的JS脚本传递过来的请求和数据,处理后,再将结果传回给页面。这项能力的底层仍然是XMLHTTP。
首先来看看JavaScript是如何调用服务器端的方法的:
<script language="javascript" type="text/javascript">
function ClientMethod()
{
//获得服务器控件(ControlName为控件名称)
var Control = document.getElementById("ControlName");
//ServerMethod为服务器方法名,<%=SplitChar %>为一特定字符(为了避免参数中带有分割符),
//Control.value为ServerMethod的参数(即控件的值)
var arg = "ServerMethod<%=SplitChar %>" + Control.value;
//启用一个对服务器端事件的客户端回调
<%= ClientScript.GetCallbackEventReference(this, "arg", "Result", "") %>;
}
//处理客户端回调结果
function Result(result)
{
alert(result);
}
</script>首先
//定义一个分隔符
public char SplitChar = (char)14;
public string str_content;
public void RaiseCallbackEvent(string the_string)
{
str_content = the_string;
}
public string GetCallbackResult()
{
//拆分由客户端传过来的参数
string[] parts = str_content.Split(SplitChar);
//生成ServerMethod的参数队列
object[] theArgList = new object[parts.Length - 1];
for (int i = 1; i < parts.Length; i++)
{
theArgList[i - 1] = parts[i];
}
//调用ServerMethod
return (string)GetType().GetMethod(parts[0]).Invoke(this, theArgList);
}
// 返回指定控件的Html代码
private string RenderControl(Control control)
{
StringWriter writer = new StringWriter(CultureInfo.InvariantCulture);
HtmlTextWriter Htmlwriter = new HtmlTextWriter(writer);
control.RenderControl(Htmlwriter );
Htmlwriter .Flush();
Htmlwriter .Close();
return writer .ToString();
}


浙公网安备 33010602011771号