2016-06-07 66 views
0

這很奇怪。我的onSuccess()在JavaScript文件中的函數返回我的整個網頁的大規模HTML代碼,而不是我實際上是從我的C#的WebMethod返回ASP.NET PageMethod onSuccess函數返回一個HTML字符串

1)我在Windows 10

運行Visual Studio 2015年的價值

2)調試時,我在SignupAccount C#方法中保留了一個斷點。斷點沒有被擊中。它沒有達到那一點。但的onSuccess函數被調用

這裏有一個解釋:

ASP.NET Web窗體的HTML:

<html xmlns="http://www.w3.org/1999/xhtml"> 
<head runat="server"> 
    <!--Code--> 
</head> 
<body class="account2 signup" data-page="signup"> 
    <!--Code--> 
    <form id="form1" runat="server"> 
     <asp:ScriptManager ID="ScriptManager1" runat="server" EnablePageMethods="true"></asp:ScriptManager> 

    <input type="text" name="firstname" id="firstname" placeholder="First Name" required autofocus> 

    <input type="text" name="lastname" id="lastname" placeholder="Last Name" required autofocus> 

    <button type="submit" onclick="signup()" id="submit-form" class="btn btn-lg btn-dark btn-rounded" data-style="expand-left">Sign In</button> 

    <script src="JS/Account.js"></script> 
    </form> 
</body> 
</html> 

的WebMethod在後面的C#代碼:

[WebMethod] 
public static string SignupAccount(string fname, string lname) 
{ 
    return "OK"; 
} 

Javascript:

function signup() { 
    var fname = document.getElementById("firstname").value; 
    var lname = document.getElementById("lastname").value; 

    PageMethods.SignupAccount(fname, lname, onSuccess, onFailure); 

    function onSuccess(val) { 
     alert(val); 
     //Technically, this should display "OK". But instead it displays a HTML String 
     //of my entire Web Page starting from the <html> tag to the end 
    } 

    function onFailure() {} 
} 

爲什麼會這樣呢?我相信程序和代碼是正確的。這與Visual Studio有關嗎?

編輯

這是我從的onSuccess功能

http://pastebin.com/6MjAFPY9

+0

您是否在瀏覽器開發人員工具 - >網絡選項卡中看到任何XHR條目SignupAccount? –

+0

@DananjayaKuppu不,我沒有看到任何條目。我試着用一個按鈕和一個web方法創建一個新的web表單,我仍然將這個大量的html字符串作爲onSuccess返回值。我認爲有配置 – Dinuka

+0

它可能會重複到一個問題:[post](http://stackoverflow.com/questions/10658061/calling-asp-net-page-method-from-javascript-not-working) –

回答

0

我的機器上創建的項目得到了響應,工作代碼如下:

<body> 
<form id="form1" runat="server"> 
    <asp:ScriptManager ID="ScriptManager1" runat="server" EnablePageMethods="true"></asp:ScriptManager> 

    <asp:TextBox ID="firstname" runat="server" /> 
    <asp:TextBox ID="lastname" runat="server" /> 

    <asp:Button ID="btn" OnClientClick ="signup();return false;" runat="server" text="Call PageMethod" /> 

</form> 

<script> 
    function signup() { 
     var fname = document.getElementById("firstname").value; 
     var lname = document.getElementById("lastname").value; 

     PageMethods.SignupAccount(fname, lname, onSuccess, onFailure); 

     function onSuccess(val) { 
      alert(val); 
      //Technically, this should display "OK". But instead it displays a HTML String 
      //of my entire Web Page starting from the <html> tag to the end 
     } 

     function onFailure() { } 
    } 
</script> 

後面的代碼:

[System.Web.Services.WebMethod] 
    public static string SignupAccount(string fname, string lname) 
    { 
     return "OK"; 
    } 

PS:確保您在頁面上沒有任何JavaScript錯誤。希望這可以幫助!

+0

我複製完全相同的代碼,我仍然得到了相同的迴應:http://pastebin.com/6MjAFPY9 – Dinuka

+0

任何javascript錯誤?在瀏覽器中使用開發工具。 – Sami

+0

這很奇怪。沒有錯誤!斷點也不會被解僱。只需進入onSuccess並返回大量的html代碼 – Dinuka

0

我有同樣的問題,這就是我解決它的方法。首先,從button標籤取下onclick屬性:

<!-- before --> 
<button type="submit" id="submit-form" onclick="signup()">Sign In</button> 

<!-- after --> 
<button type="submit" id="submit-form">Sign In</button> 

然後用這條線的Javascript替換:

$get('submit-form').addEventListener("click", function (event) { 
    signup(); 
    event.preventDefault(); 
}); 

該按鈕的點擊事件的默認事件處理程序將導致提交的頁面,所以我們需要撥打preventDefault[1][2]來抑制這一點。