您的位置:首页 > 其它

使用ICallbackEventHandler接口实现页面无刷新

2006-11-16 11:15 701 查看
此接口属于.net framework 2.0新特性。

MSDN原文如下:

<%@ Page Language="C#"
%>
<%@ Implements
Interface="System.Web.UI.ICallbackEventHandler"
%>

<!DOCTYPE html PUBLIC "-//W3C//DTD
XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<script
runat="server">
public int cbCount =
0;

// Define method that processes the callbacks on
server.
public void RaiseCallbackEvent(String
eventArgument)
{
cbCount =
Convert.ToInt32(eventArgument) + 1;
}

//
Define method that returns callback result.
public string
GetCallbackResult()
{
return
cbCount.ToString();
}

protected void
Page_Load(object sender, EventArgs e)
{
// Define a
StringBuilder to hold messages to output.
StringBuilder sb =
new StringBuilder();

// Check if this is a
postback.
sb.Append("No page postbacks have
occurred.");
if
(Page.IsPostBack)
{
sb.Append("A page postback has
occurred.");
}

// Write out any
messages.
MyLabel.Text = sb.ToString();

//
Get a ClientScriptManager reference from the Page
class.
ClientScriptManager cs =
Page.ClientScript;

// Define one of the callback
script's context.
// The callback script will be defined in a
script block on the page.
StringBuilder context1 = new
StringBuilder();
context1.Append("function
ReceiveServerData1(arg,
context)");
context1.Append("{");
context1.Append("Message1.innerText
= arg;");
context1.Append("value1 =
arg;");
context1.Append("}");

// Define
callback references.
String cbReference1 =
cs.GetCallbackEventReference(this, "arg",

"ReceiveServerData1", context1.ToString());
String
cbReference2 = cs.GetCallbackEventReference("'" +

Page.UniqueID + "'", "arg", "ReceiveServerData2", "",

"ProcessCallBackError", false);
String
callbackScript1 = "function CallTheServer1(arg, context) {" +

cbReference1 + "; }";
String callbackScript2 =
"function CallTheServer2(arg, context) {" +
cbReference2 + ";
}";

// Register script blocks will perform call to
the server.
cs.RegisterClientScriptBlock(this.GetType(),
"CallTheServer1",
callbackScript1,
true);
cs.RegisterClientScriptBlock(this.GetType(),
"CallTheServer2",
callbackScript2,
true);

}

</script>

<script
type="text/javascript">
var value1 = 0;
var
value2 = 0;
function ReceiveServerData2(arg,
context)
{
Message2.innerText = arg;
value2
= arg;
}
function ProcessCallBackError(arg,
context)
{
Message2.innerText = 'An error has
occurred.';
}

</script>

<html
xmlns="http://www.w3.org/1999/xhtml" >
<head
id="Head1"
runat="server">
<title>ClientScriptManager
Example</title>
</head>
<body>
<form
id="Form1"
runat="server">
<div>
Callback 1
result: <span
id="Message1">0</span>
<br
/>
Callback 2 result: <span
id="Message2">0</span>
<br
/> <br />
<input type="button"
value="ClientCallBack1" onclick="CallTheServer1(value1,
alert('Increment value'))"/>
<input
type="button" value="ClientCallBack2" onclick="CallTheServer2(value2,
alert('Increment value'))"/>
<br />
<br />
<asp:Label id="MyLabel"
runat="server"></asp:Label>
</div>
</form>
</body>
</html>

下面是简化的脚本

<%@ Page Language="C#"
AutoEventWireup="true" Debug="true" CodeFile="Index.aspx.cs"
Inherits="Index" %>
<!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>
<
/head>
<body>
<form
id="Form1" runat="server">

 <div>
  <asp:TextBox ID="TestTxt"
runat="server"></asp:TextBox>

  <br />
  <br />

  <input onclick="CallTheServer(TestTxt.value)" type="button"
value="提交" />
  <br />

  <br />

 </div>

</form>
</body>
</html>

CodeFile:

using
System;
using System.Collections;
using
System.Configuration;
using System.Data;
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;

public partial
class Index : System.Web.UI.Page,
ICallbackEventHandler
{
string
returnValue;

protected void Page_Load(object
sender, EventArgs e)
{
 string ReceiveScript =
@"
function ReceiveServerData(arg)
{

document.forms['Form1'].TestTxt.value = arg;
}";

 ClientScript.RegisterClientScriptBlock(this.GetType(),
"ReceiveServerData", ReceiveScript, true);

 string
CallbackScript = @"
function CallTheServer(arg) {
"
+ ClientScript.GetCallbackEventReference(this, "arg",
"ReceiveServerData", null) + @";
}
";

 ClientScript.RegisterClientScriptBlock(this.GetType(),
"CallTheServer", CallbackScript, true);
}

// 接收客户端消息
public void RaiseCallbackEvent(string
eventArgument)
{
 if (eventArgument != "")
returnValue = eventArgument + 1;
}

//
返回客户端
public string GetCallbackResult()
{

 return returnValue;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: