会的人应该一看就明白,clientcallback最简单的应用。
先谢谢观看的人啦!
根据MSDN的例子,同它完全一样的声明:
Dim cbReference As String
cbReference=Page.ClientScript.GetCallbackEventReference(Me, "arg", "ReceiveServerData", "context")
Dim callbackScript As String = String.Empty
callbackScript &= "function CallServer(arg, context) { " & cbReference & "} ;"
Page.ClientScript.RegisterClientScriptBlock(Me.GetType(), "CallServer", callbackScript, True)
后台的两个函数代码如下:
    RaiseCallbackEvent(ByVal eventArgument As String)函数中代码
        dim strTest as string = eventArgument     GetCallbackResult()函数中代码
        return strTest 前台两个函数如下:
    function ReceiveServerData(retValue) {
        fmTest.txtTest.value = strTest 
    }    function SetServerData(strCd) {
        var strCd = "my test"
        CallServer(strCd, "");
    }
1  执行SetServerData后控件txtTest自然显示出"my test,在后台一个的按钮中,变量str的值是空,明明已经有看着页面上有值("my test"),为什么取不到呢?
Protected Sub btnCd_Click() Handles btnCd.Click
    dim str as string = me.txtTest.text
End Sub2  执行SetServerData后控件txtTest自然显示出"my test",但是为什么页面刷新后,txtTest里的值被清空了呢,其它不利用clientcallback控件的值没有变化。再次谢谢大家啦,刚学,好多不懂!

解决方案 »

  1.   

    木虾米伤心的,很多事情到最后都是求人不如求己,关键是自己钻研你说的两个问题都有个服务器控件txtTest的状态问题,asp.net用ViewState让服务器控件有"状态",回调的过程中,控件的显示值已经更新,但是控件的状态还如原来(上一次刷新后的状态),所以你去取txtTest.text是取不到的。而当你PostBack(刷新)后,txtTest的值被它原来的状态(上一次刷新后的状态,就是empty)所覆盖,所以被清空了,用回调时显示值和实际值(状态)是异步的.
      

  2.   

    试了一下那个例子,
    1 可以取到txtTest的值
    2 刷新后txtTest的值会被清空,PostBack不会
      

  3.   

    怎样能取到txtTest里的值呢?谢谢!
      

  4.   

    你不是在load 事件中有清空功能啊把代吗都弄出来看看
      

  5.   

    public partial class client : System.Web.UI.Page, ICallbackEventHandler
    {
        private string aStringValue;    protected void Page_Load(object sender, EventArgs e)
        {
            ClientScriptManager cm = Page.ClientScript;
            String cbReference = cm.GetCallbackEventReference(this, "arg",
                "ReceiveServerData", "");
            String callbackScript = "function CallServer(arg, context) {" +
                cbReference + "; }";
            cm.RegisterClientScriptBlock(this.GetType(),
                "CallServer", callbackScript, true);
        }    public string GetCallbackResult()
        {
            return aStringValue;
        }    public void RaiseCallbackEvent(string eventArgument)
        {
            aStringValue = eventArgument + " new value";
        }
        protected void Button1_Click(object sender, EventArgs e)
        {
            Response.Write(txtTest.Text);//这里直接取,没发现你说的问题
        }
    }
      

  6.   

    TO:scow(怡红快绿) 
    Response.Write(txtTest.Text);//这里直接取,没发现你说的问题我按照上面代码,发现txtTest.Text里是上一次值,并不是这一次所赋的值。
    跟nZAI(学习的感觉真好)解释的一样。呵呵!还是未搞定呀!
      

  7.   

    受到nZAI(学习的感觉真好)的启发,倒是实现了。
    但是觉得不太好!
    ViewState默认的属性是只读的,我们自己能改变它的值吗?
      

  8.   

    一般的做法是添个隐藏域,在前台改变值的时候顺道把隐藏域复制,PostBack后读隐藏域的value就可以了。