台后类必须实现 ICallbackEventHandler 接口.
它提供两个类,一个是事件触发,一个是返回结果,
然后往前台页面注册一个 javaScript 函数.然后由这个函数来触发后台方法.
需要交互的时候调用这个自动注册的 javaScript 函数即可.
本质上还是用的 Ajax 技术,然后页面会返回一个 WebResource.axd 文件,这也是一个文本文件,里面封装了一些 Javascript 代码.实现 xmlHttpReuqest 的方法.
前台:
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>无标题页</title>
<script language="javascript">
//客户端执行的方法
//下面的方法是接收并处理服务器方法执行的返回结果
function Success(args, context)
{
message.innerText = args;
}
//下面的方式是当接收服务器方法处理的结果发生异常时调用的方法
function Error(args, context)
{
message.innerText = '发生了异常';
}
function form_submit() {
var aa = document.getElementById("txtUserName").value;
CallServerMethod(aa, null)
}
</script>
</head>
<body>
<form id="form1" runat="server">
<div>
<input type="text" id="txtUserName" runat="server" />
<input type="text" id="txt1" runat="server" />
<input type="button" id="btnSubmit" runat="server" value="提交" οnclick="form_submit()" />
<div id="message"></div>
</div>
</form>
</body>
</html>
-----------------------------------------------------------------------------------------------------------------------------------------------------
后台:
using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
public partial class _Default : System.Web.UI.Page,ICallbackEventHandler
{
string result = "";
protected void Page_Load(object sender, EventArgs e)
{
if (!this.IsPostBack)
{
string reference= this.ClientScript.GetCallbackEventReference(this, "args", "Success", "context", "Error", true);
//此时 reference=WebForm_DoCallback('__Page',args,Success,context,Error,true)
string clientMethod =" function CallServerMethod(args,context){ /n"+reference +"/n }";
this.ClientScript.RegisterClientScriptBlock(this.GetType(), "CallServerMethod", clientMethod,true);
}
}
#region ICallbackEventHandler 成员
string ICallbackEventHandler.GetCallbackResult()
{
return result;
}
void ICallbackEventHandler.RaiseCallbackEvent(string eventArgument)
{
if (eventArgument.ToLower().IndexOf("admin") != -1)
{
result = eventArgument + "不能作为用户名注册。";
}
else
{
result = eventArgument + "可以注册。";
}
}
#endregion
}