2017-08-17 132 views
0

我在教自己如何使用ASP.NET,我試圖在.aspx文件中的JS函數中調用C#函數。未捕獲的參考錯誤:函數未定義(ASP.NET)

這裏是我的JS部分:

<script type="text/javascript"> 
     function Run() { 
     alert("Running!") 
     var ranking = parseInt(document.getElementById("rank").value); 
     var collsize = parseInt(document.getElementById("size").value); 
     var collsafety = 
      parseInt(document.getElementById("safety").value); 
     var best = PageMethods.Survey(ranking, collsize, collsafety); 
     document.write(best); 
    } 
</script> 

的C#函數的簽名(它嵌入在像JS功能.aspx文件):

<script language="c#"> 
    [System.Web.Services.WebMethod] 
    public static string Survey(int ranking, int collsize, int 
     collsafety) { 
     .... 
    } 

確切的錯誤信息是:未捕獲ReferenceError:PageMethods.Survey未定義。

我用一個按鈕使用onclick調用Run方法。我知道該方法已輸入,因爲發生了第一個警報。但是,當我嘗試調用調查時,出現錯誤。

我已經閱讀了幾個答案,像這樣:jquery PageMethod saying the method does not exist,但建議的AJAX也沒有工作。我也讀過這個:https://www.codeproject.com/Questions/561226/errorpluspageMethodplusisplusundefined但我看不到我沒做對的東西...

回答

0

因爲您將c#代碼直接嵌入到aspx文件中,所以您的代碼不起作用。嵌入它的aspx.cs文件,而不是:

protected void Page_Load(object sender, EventArgs e) 
    { 

    } 

[System.Web.Services.WebMethod] 
public static string Survey(int ranking, int collsize, int 
    collsafety) 
    { 
    return "Hello"; 
    } 

您可以通過PageMethods稱之爲:

<script type="text/javascript"> 

     function Run() { 
     var ranking = 123; 
     var collsize = 123; 
     PageMethods.Survey(ranking, collsize, onSucess, onError); 

     function onSucess(result) { 
      alert(result); 
     } 

     function onError(result) { 
      alert('Please contact administrator.'); 
     } 
    } 
</script> 

最後別忘了在調用頁面(Default.aspx的在我的例子中添加的ScriptManager ),使PageMethods爲True:

<asp:ScriptManager ID="ScriptManager1" runat="server" EnablePageMethods="True"> 
</asp:ScriptManager> 

這看起來怎麼樣備查:

enter image description here

當我調用腳本按鈕上的代碼:

<asp:Button ID="Button1" runat="server" Text="Button" OnClientClick="Run()" /> 
+0

其實我切換到AJAX,現在它不扔特定的錯誤(我沒有做正確的AJAX第一次)。但現在我得到一個POST 404 Not Found錯誤:( –

+0

你可以用AJAX做到這一點,但我簡化了我的解釋,因爲你問如何調用js函數上的c# –

+0

謝謝你知道什麼可能導致AJAX錯誤,在任何機會?(代碼在下一個評論 - 對格式化的歉意) –

相關問題