2017-05-06 56 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

相關問題