在已经发布的 ASP.NET2.0 中,无刷新页面开发相关部分同 beta2 有不少改动。而且在越来越多的 Ajax 开发包被开发出来的情况下, ASP.NET2.0 自带的无刷新页面技术没有被很多人了解,甚至不少人认为该功能有些“鸡肋”。但如果我们仅仅是在程序中加入很少部分的 Ajax 特性, Atlas 、 Ajax.Net 等就显得有些“杀鸡用牛刀”的感觉了。而且,我认为使用 ASP.NET2.0 提供的方法进行开发并不很复杂,相反,使用很少的代码就可以做出来很棒的效果!
2 public void RaiseCallbackEvent( string eventArgument)
3 {
4 // 可以根据传递的参数不同,调用不同的处理逻辑
5 str = " 从服务器端返回的内容: " + eventArgument;
6 }
7
8 public string GetCallbackResult()
9 {
10 return str;
11 }
12
2 < input id ="Button1" type ="button" value ="提交到Label1" onclick ="CallServer(TextBox1, Label1)" />< br/ >
3 < asp:Label ID ="Label1" runat ="server" Text ="Label1:" ></ asp:Label >
4
2 // 由button调用
3 function CallServer(inputcontrol, context)
4 {
5 context.innerHTML = " Loading

6 arg = inputcontrol.value;
7 // 注册回调方法
8 <%= ClientScript.GetCallbackEventReference( this , " arg " , " ReceiveServerData " , " context " ) %> ;
9 }
10 // 在回调方法中注册的接收返回结果的函数
11 function ReceiveServerData(result, context)
12 {
13 context.innerHTML = result;
14 }
15 </ script >
16
其实我准备做一个ASP.NET 2.0并且使用AJAX的Web项目,于是到博客园到处寻着AJAX的文章,恰好翻到了Leon.Zhou的ASP.NET 2.0 正式版中无刷新页面的开发
按照代码示例和讲解做了一个页面,确实不错啊。因为俺平时几乎都用Firefox,所以就顺手测试了一下Firefox下的效果,结果发现点了Button之后没有反应……
于是打开Javascript控制台,说是 Label1没有定义
又看了一下源代码,<span id="Label1"></span>好好的躺在那里
之后N分钟略过< br>反正后来就是想到了两个月前做过的一个东西好像在Firefox里有类似的现象,当时给解决了,翻出代码
发现 Firefox不能直接通过ID引用
解决方法就是使用document的getElementById()方法来返回< br>ReceiveServerData()方法改成这样就行了
{
document.getElementById(context.id).innerHTML=result;
}
这样IE和Firefox都可以正常使用了
最后再次感谢Leon.Zhou的文章
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
可以在客户端无动态刷新的取服务器端的时间
新建一个页面:
后台代码:
public partial class Test : System.Web.UI.Page, ICallbackEventHandler
{
public string strVal = "";
protected void Page_Load(object sender, EventArgs e)
{
ClientScriptManager cs = Page.ClientScript;
string callback = cs.GetCallbackEventReference(this, "this.value", "FunTest", "this.value");
txt.Attributes.Add("onclick", callback);
}
public void RaiseCallbackEvent(string eventArgument)
{
//char[] chars = eventArgument.ToCharArray();
//Array.Reverse(chars);
//strVal = new string(chars);
strVal = DateTime.Now.ToString();
}
public string GetCallbackResult()
{
return strVal;
}
}
页面代码
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>无标题页</title>
<script language="javascript">
function FunTest(result,context)
{
document.getElementById("txt").value = result + " " + context;
}
</script>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:TextBox ID="txt" runat="server"></asp:TextBox>
</div>
</form>
</body>
</html>