使用AjaxPro传递变量

时间:2009-01-07 14:29:14

标签: asp.net vb.net ajaxpro

前几天我找到了this AJAX .NET framework,到目前为止我很享受与它合作。但是,我无法弄清楚的一件事(文档相当差的atm)是如何通过AJAX脚本传递变量。这就是我到目前为止所做的:

//default2.aspx.vb
  <AjaxPro.AjaxMethod()> _
  Public Shared Function testSomething(ByVal value As String) As String
     Return value
  End Function
  Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
     AjaxPro.Utility.RegisterTypeForAjax(GetType(Default2))
  End Sub

//default2.aspx
  <a href="#" onclick="doTest(1);">test something</a>
  <div id="temp" style="margin:15px 15px 0px 5px; padding:10px;"></div>
  <script type="text/javascript">
     function doTest(x){
         Default2.testSomething(doTest_callback,x)
     }
     function doTest_callback(res,x){
         alert(res.value);
         document.getElementById("temp").innerHTML = ">>>> " + x + " <<<<"
     }
  </script>

我还有其他一些可以正常工作的测试函数,它们可以执行相对更复杂的操作。任何人都对如何使用AjaxPro传递变量有任何见解?我们也欢迎其他方法!

4 个答案:

答案 0 :(得分:1)

使用AjaxPro,您首先传递参数,并将回调函数作为最后一个参数传递。如果您在此处使用匿名函数,则可以访问响应和原始值。它看起来像这样:

function doTest(x){
    Default2.testSomething(x, function(res){
        doTest_callback(res.value, x);
    });
}
function doTest_callback(resonseValue,originalValue){
    alert("response: " + responseValue);
    alert("original: " + originalValue);
}

答案 1 :(得分:1)

我知道这是一个旧的,但我一直在使用AjaxPro并仍然在.NET 4中使用它 - 它仍然可以解决问题。

如果要通过回调传递一个额外的变量并将其返回到结果中,请在回调后传递该值并使用res.context来检索它。

像这样:

function CallSomething()
{
   DoServerSide.MethodName(arg1, arg2, CallbackFunction, ExtraVar);
}

function CallbackFunction(res)
{
  var result = res.value;
  var extra = res.context;
}

答案 2 :(得分:0)

我使用该框架已经有一段时间了(版本6.9.22.2,所以事情可能会有所改变) - 你看过ASP.NET AJAX framework吗?我不确定迈克尔自从这个问题出现以来做了多少工作 - 他的博客文章在2007年7月左右就已经枯竭了。

无论如何,如果我理解你的问题,你想:

  1. 将值传递给服务器端方法
  2. 在回拨方法的某处使用该值
  3. 首先,要将变量传递给您的方法,它们不应该出现在回调函数的名称之前吗?

    要在回调中检索初始值,我要么:

    1. 将它们作为JSON返回对象的一部分返回
    2. 将它们存储在两个函数范围之外的变量中
    3. 使用选项2,您将拥有:

      <a href="#" onclick="doTest(1);">test something</a>
      <div id="temp" style="margin:15px 15px 0px 5px; padding:10px;"></div>
      <script type="text/javascript">
         var initialValue;
      
         function doTest(x){
           initialValue= x;
           Default2.testSomething(x, doTest_callback)
         }
      
         function doTest_callback(res){
           alert(res.value);
           document.getElementById("temp").innerHTML = ">>>> " + initialValue + " <<<<"
         }
      </script>
      

      这样做的主要缺点是,如果用户在处理第一个请求时使用不同的值触发“doTest”方法,则在doTest_callback中查询时,initialValue的值很可能已经改变。

答案 3 :(得分:0)

嗯。您是否注意到任何JavaScript错误?如果您安装了Firefox并FireBug,那么JavaScript控制台中是否有任何错误?

听起来组件生成的JS文件有问题。