public partial class MMM_bMMM0402 : System.Web.UI.Page, ICallbackEventHandler
{
    #region ICallbackEventHandler Members

    private string result;

    public string GetCallbackResult()
    {
        return result;
    }

    public void RaiseCallbackEvent(string eventArgument)
    {
        result = eventArgument;
    }

    #endregion
   
    protected void Page_Load(object sender, EventArgs e)
    {
        ClientScriptManager cs = Page.ClientScript;

        StringBuilder context1 = new StringBuilder();
        context1.Append("function AddBoxID(str)");
        context1.Append("{");
        context1.Append("document.all.listA.add(new Option(str,str))");
        context1.Append("}");

        String cbReference1 = cs.GetCallbackEventReference(this, "str", "AddBoxID", context1.ToString(),true);

        String callbackScript1 = "function AddBoxID(str) {" + cbReference1 + "; }";

        cs.RegisterClientScriptBlock(this.GetType(), "AddBoxID", callbackScript1, true);


        tbBoxID.Attributes.Add("onkeypress", "if(event.keyCode==13){AddBoxID(this.value);return false;};");
    }
}

 

ClientScriptManager..::.GetCallbackEventReference 方法 的參考資料:

http://msdn.microsoft.com/zh-cn/architecture/system.web.ui.clientscriptmanager.getcallbackeventreference.aspx

 

Sample:(轉)

.NET Framework 类库
ClientScriptManager.GetCallbackEventReference 方法 (String, String, String, String, String, Boolean)

注意:此方法在 .NET Framework 2.0 版中是新增的。

获取一个对客户端函数的引用;调用该函数时,将启动一个对服务器端事件的客户端回调。此重载方法的客户端函数包含指定的目标、参数、客户端脚本、上下文、错误处理程序和布尔值。

命名空间:System.Web.UI
程序集:System.Web(在 system.web.dll 中)

C#
public string GetCallbackEventReference ( string target, string argument, string clientCallback, string context, string clientErrorCallback, bool useAsync )

参数
target

处理客户端回调的服务器 Control 的名称。该控件必须实现 ICallbackEventHandler 接口并提供 RaiseCallbackEvent 方法。

argument

从客户端脚本传递给服务器端的一个参数

RaiseCallbackEvent 方法。

clientCallback

一个客户端事件处理程序的名称,该处理程序接收成功的服务器端事件的结果。

context

启动回调之前在客户端计算的客户端脚本。脚本的结果传回客户端事件处理程序。

clientErrorCallback

客户端事件处理程序的名称,该处理程序在服务器端事件处理程序出现错误时接收结果。

useAsync

true 表示同步执行回调;false 表示异步执行回调。

 

 

返回值

调用客户端回调的客户端函数的名称。

GetCallbackEventReference 方法的此重载接受一个 target 字符串参数,而不是 Control 参数。当您希望该回调返回到某个参数,而不是包含该控件的 UniqueID 的字符串时,可以使用此重载。

另外,GetCallbackEventReference 方法的此重载需要一个 useAsync 和一个 clientErrorCallback 参数。useAsync 参数允许您通过将该值设置为 true 来异步执行客户端回调。此方法的重载版本,该版本不需要 useAsync 参数设置为默认值 falseclientErrorCallback 参数允许您定义一个客户端函数的名称,如果服务器端处理程序(RaiseCallbackEvent 方法)返回错误则调用该客户端函数。此方法的不需要 clientErrorCallback 参数的重载版本将该值设置为空。

有关此方法的更多信息,请参见关于此重载 GetCallbackEventReference 方法的备注。

下面的代码示例演示如何在递增整数的客户端回调方案中使用 GetCallbackEventReference 方法的两种重载。

两种回调机制显示;它们的区别在于 context 参数的使用。ReceiveServerData1 客户端回调函数是使用 context 参数提供的。相反,ReceiveServerData2 客户端回调函数是在页面的 <script> 块中定义的。RaiseCallbackEvent 方法是一个服务器端处理程序,它递增传递给它的值,而 GetCallbackResult 方法将增加的值作为字符串返回。如果 RaiseCallbackEvent 方法返回错误,则调用 ProcessCallBackError 客户端函数。

<%@ 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 > <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>
posted on 2008-08-26 17:26  fmxyw  阅读(522)  评论(0编辑  收藏  举报