2017-05-06 31 views
0

我有一个ASPX页面,它调用服务器的内部JavaScript函数的AJAX调用。我需要处理发送到服务器的(json)数据,然后将数据从服务器返回给客户端并使用参数调用函数。ASPX Codebehind调用来自WebMethod的页面客户端脚本

我的Ajax代码

function() { 
     var myVar= "ooooblah"; 

     $.ajax({ 
      type: "POST", 
      url: "MyPage.aspx/TestFunc", 
      data: "{val:'" + myVar + "'}", 
      contentType: "application/json; charset=utf-8", 
      dataType: "json", 
      success: OnSuccess 
    }); 
} 

我的代码隐藏aspx.cs

[WebMethod] 
public static void TestFunc(string val) 
{ 
    //process code here 
    Page.ClientScript.RegisterStartupScript(...); //tried using this but it don't work 
} 

我得到的,当我尝试编译错误是:

错误CS0120对于非静态字段m,需要一个对象引用ethod或属性“Control.Page”

错误CS0026关键字“这个”是不是一个静态属性,静态方法或静态字段初始

我需要把它放在外面在Page_Load有效? 不知道如何解决此问题

回答

0

您将无法从C#调用JavaScript函数,因为这是“无状态”(可以说)POST调用,并且该调用在页面上下文之外运行。该方法可以在任何其他类中,结果将是相同的,既不能访问Controls数组也不能访问Page属性,这就是为什么该方法是静态的

您可以做的是添加一个更复杂的响应作为OnSuccess函数的提示。所以的onSuccess功能可以检查:“嘿,如果我得到了响应的ExtraArgsForMagicFunction财产就意味着我需要调用我的神奇功能”

在客户端

<script type="text/javascript"> 

    var myVar= "ooooblah"; 

    $.ajax({ 
     type: "POST", 
     url: "WebMethodTest.aspx/TestFunc", 
     data: "{val:'" + myVar + "'}", 
     contentType: "application/json; charset=utf-8", 
     dataType: "json", 
     success: onSuccess 
    }); 

    function onSuccess(data) { 
     alert(data.d.MainResponse); 

     if (data.d.ExtraArgsForMagicFunction) { 
      magicFunction(data.d.ExtraArgsForMagicFunction) 
     } 
    } 

    function magicFunction(args) { 
     alert(args[0]); 
    } 
</script> 

在服务器

[Serializable] 
public struct FuncResult 
{ 
    public string MainResponse; 
    public string[] ExtraArgsForMagicFunction; 
} 
[WebMethod] 
[ScriptMethod(ResponseFormat = ResponseFormat.Json)] 
public static FuncResult TestFunc(string val) 
{ 
    return new FuncResult() 
    { 
     MainResponse = val + "Response", 
     ExtraArgsForMagicFunction = new[] { "Some Extra Args" } 
    }; 
} 

如果你得到一个401检查了这一点ASP.NET Calling WebMethod with jQuery AJAX "401 (Unauthorized)"

如果你想知道“为什么d?”检查了这What does {"d":""} means in asp.net webservice response

+0

谢谢,但我不认为你了解我的问题...我能够从JavaScript到C#(codebehind)...我有问题做的是调用一个单独的JavaScript函数时我在C#中...我可以成功就好了 – fifamaniac04

+0

@ fifamaniac04我改变了我的答案,看看 – hardkoded

+0

谢谢,但我能够得到ajax工作...原来我没有正确格式化JSON数据 – fifamaniac04

相关问题